{"id":"5cd3a52c-430e-4cb6-b0f6-5daba869062c","entityType":"agent","slug":"clawhub-chrischall-vibo-mcp","name":"vibo-mcp","canonicalUrl":"https://www.xpersona.co/agent/clawhub-chrischall-vibo-mcp","canonicalPath":"/agent/clawhub-chrischall-vibo-mcp","generatedAt":"2026-10-10T07:01:41.829Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T15:18:23.770Z","emptyReason":null},"description":"Access your Vibo (vibodj.com) event music planning via MCP. Use when the user asks about their Vibo events, wedding/event timeline, song requests, playlists, or \"do not play\" list, or wants to add or like songs, join an event from a share link, or export songs to Spotify/Apple Music. Triggers on phrases like \"what's on my Vibo timeline\", \"add this song to the first dance\", \"what songs did guests request\", \"join this Vibo event\", or \"export our playlist to Spotify\". Requires vibo-mcp installed and the vibo server registered (see Setup below).","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 2.4K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:vibo-mcp","sourceUrl":"https://clawhub.ai/chrischall/vibo-mcp","homepage":"https://clawhub.ai/chrischall/skills/vibo-mcp","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/chrischall/vibo-mcp","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/chrischall/skills/vibo-mcp","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":68,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"vibo-mcp technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T15:18:23.770Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T15:18:23.770Z","emptyReason":null},"stars":null,"forks":null,"downloads":2409,"packageName":null,"latestVersion":"2.4.3","tractionLabel":"2.4K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T15:18:23.769Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T15:18:23.770Z","lastCrawledAt":"2026-10-09T15:18:23.769Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T15:18:23.769Z","lastVerifiedAt":null,"highlights":[{"version":"2.4.3","createdAt":"2026-10-07T13:42:47.125Z","changelog":"vibo-mcp 2.4.3 - Removed the redundant skill-card.md documentation file. - No changes to core functionality or tools.","fileCount":3,"zipByteSize":5774},{"version":"2.4.2","createdAt":"2026-10-05T02:50:35.855Z","changelog":"- Removed the file: skill-card.md. - No functional changes to features or setup. - Release focused on housekeeping and project file cleanup.","fileCount":3,"zipByteSize":5759},{"version":"2.4.1","createdAt":"2026-10-03T01:42:53.976Z","changelog":"- Removed the file `skill-card.md`. - No functional or behavioral changes to the skill itself.","fileCount":3,"zipByteSize":5879},{"version":"2.4.0","createdAt":"2026-09-28T05:11:10.373Z","changelog":"vibo-mcp 2.4.0 - Updated the browser capture authentication method to use the ContextMint Bridge extension, replacing the fetchproxy extension (Chrome only). - Expanded tool coverage: added support for creating and deleting timeline sections (`vibo_create_section` and `vibo_delete_section`), and reordering sections (`vibo_reorder_sections`). - Documented improved error handling and confirmation previews for section and song management tools. - Removed the deprecated skill-card.md file.","fileCount":3,"zipByteSize":5908},{"version":"2.3.1","createdAt":"2026-09-25T15:50:51.867Z","changelog":"vibo-mcp 2.3.1 - Updated documentation in SKILL.md for improved detail and clarity, especially regarding the `view` parameter and tool defaults. - Clarified the behavior of `view: \"compact\"` for `vibo_list_event_users`, including email projection policy. - Removed the outdated skill-card.md file.","fileCount":3,"zipByteSize":5357},{"version":"2.3.0","createdAt":"2026-09-24T15:11:56.785Z","changelog":"- Confirmation flow for all mutating tools has been revised: writes now require explicit user approval via a confirmToken preview; arguments must be identical on confirmation. - `MCP_CONFIRM_MODE` added to control confirmation behavior (`ask-user` default, with `auto` and `refuse` options). - Documentation updates in SKILL.md clarify the new confirmation process and improve instruction detail. - Removed: obsolete file `skill-card.md`.","fileCount":3,"zipByteSize":5321},{"version":"2.2.3","createdAt":"2026-09-23T21:40:38.608Z","changelog":"vibo-mcp 2.2.3 - Updated SKILL.md with improved setup instructions and more explicit details for certain tools. - Added documentation specifying that `vibo_set_profile_photo` accepts images from a local upload directory, with default directory noted. - Removed obsolete skill-card.md file for clarity. - No changes to functional code or APIs; documentation update only.","fileCount":3,"zipByteSize":4981},{"version":"2.2.2","createdAt":"2026-09-23T15:41:47.605Z","changelog":"vibo-mcp 2.2.2 - Removed the file: skill-card.md - No changes to functionality or features.","fileCount":3,"zipByteSize":4978}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:vibo-mcp","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:vibo-mcp` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/chrischall/vibo-mcp before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-vibo-mcp/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-vibo-mcp/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-vibo-mcp/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-vibo-mcp/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-vibo-mcp/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-vibo-mcp/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T07:01:41.824Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-vibo-mcp/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-vibo-mcp/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-vibo-mcp/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-vibo-mcp/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T15:18:23.770Z","emptyReason":null},"readme":"Skill: vibo-mcp\n\nOwner: chrischall\n\nSummary: Access your Vibo (vibodj.com) event music planning via MCP. Use when the user asks about their Vibo events, wedding/event timeline, song requests, playlists, or \"do not play\" list, or wants to add or like songs, join an event from a share link, or export songs to Spotify/Apple Music. Triggers on phrases like \"what's on my Vibo timeline\", \"add this song to the first dance\", \"what songs did guests request\", \"join this Vibo event\", or \"export our playlist to Spotify\". Requires vibo-mcp installed and the vibo server registered (see Setup below).\n\nTags: latest:2.4.3\n\nVersion history:\n\nv2.4.3 | 2026-10-07T13:42:47.125Z | auto\n\nvibo-mcp 2.4.3\n\n- Removed the redundant skill-card.md documentation file.\n- No changes to core functionality or tools.\n\nv2.4.2 | 2026-10-05T02:50:35.855Z | auto\n\n- Removed the file: skill-card.md.\n- No functional changes to features or setup.\n- Release focused on housekeeping and project file cleanup.\n\nv2.4.1 | 2026-10-03T01:42:53.976Z | auto\n\n- Removed the file `skill-card.md`.\n- No functional or behavioral changes to the skill itself.\n\nv2.4.0 | 2026-09-28T05:11:10.373Z | auto\n\nvibo-mcp 2.4.0\n\n- Updated the browser capture authentication method to use the ContextMint Bridge extension, replacing the fetchproxy extension (Chrome only).\n- Expanded tool coverage: added support for creating and deleting timeline sections (`vibo_create_section` and `vibo_delete_section`), and reordering sections (`vibo_reorder_sections`).\n- Documented improved error handling and confirmation previews for section and song management tools.\n- Removed the deprecated skill-card.md file.\n\nv2.3.1 | 2026-09-25T15:50:51.867Z | auto\n\nvibo-mcp 2.3.1\n\n- Updated documentation in SKILL.md for improved detail and clarity, especially regarding the `view` parameter and tool defaults.\n- Clarified the behavior of `view: \"compact\"` for `vibo_list_event_users`, including email projection policy.\n- Removed the outdated skill-card.md file.\n\nv2.3.0 | 2026-09-24T15:11:56.785Z | auto\n\n- Confirmation flow for all mutating tools has been revised: writes now require explicit user approval via a confirmToken preview; arguments must be identical on confirmation.\n- `MCP_CONFIRM_MODE` added to control confirmation behavior (`ask-user` default, with `auto` and `refuse` options).\n- Documentation updates in SKILL.md clarify the new confirmation process and improve instruction detail.\n- Removed: obsolete file `skill-card.md`.\n\nv2.2.3 | 2026-09-23T21:40:38.608Z | auto\n\nvibo-mcp 2.2.3\n\n- Updated SKILL.md with improved setup instructions and more explicit details for certain tools.\n- Added documentation specifying that `vibo_set_profile_photo` accepts images from a local upload directory, with default directory noted.\n- Removed obsolete skill-card.md file for clarity.\n- No changes to functional code or APIs; documentation update only.\n\nv2.2.2 | 2026-09-23T15:41:47.605Z | auto\n\nvibo-mcp 2.2.2\n\n- Removed the file: skill-card.md\n- No changes to functionality or features.\n\nv2.2.1 | 2026-09-21T04:13:08.607Z | auto\n\n- Removed the sample file skill-card.md.\n- No changes to functionality or configuration.\n- Documentation and usage remain unchanged.\n\nv2.2.0 | 2026-09-20T18:30:48.864Z | auto\n\n- Removed the sample file skill-card.md.\n- No user-facing features or functional changes.\n\nv2.1.0 | 2026-09-20T02:52:32.662Z | auto\n\nvibo-mcp 2.1.0\n\n- Removed the documentation file skill-card.md.\n- No changes to functionality; this update is limited to file cleanup.\n\nv2.0.0 | 2026-09-19T11:20:03.064Z | auto\n\n## vibo-mcp 2.0.0\n\n- Removed the file `skill-card.md`.\n- No user-facing functional changes documented.\n- All documentation and technical details remain up to date in SKILL.md.\n\nv1.8.2 | 2026-09-15T19:25:35.558Z | auto\n\n- Removed the file: skill-card.md\n- No functional or user-facing changes in this version.\n\nv1.8.1 | 2026-09-10T17:52:05.032Z | auto\n\nvibo-mcp 1.8.1\n\n- Removed the file: skill-card.md\n- No functional or feature changes to skill operation or usage.\n\nv1.8.0 | 2026-09-08T00:35:52.638Z | auto\n\nvibo-mcp 1.8.0\n\n- Expanded `view: \"compact\" | \"full\"` support: now applies to six read tools that fetch media, not just one.\n- Updated documentation to reflect that compact mode strips media (cover art, images) by default for all applicable reads.\n- Described the view logic's test coverage for automatic consistency.\n- Removed the now-unneeded skill-card.md file.\n\nv1.7.1 | 2026-09-05T00:51:13.109Z | auto\n\n- Removed the redundant skill-card.md file.\n- Expanded documentation in SKILL.md to detail the server's `view` parameter, especially for `vibo_search_songs`, explaining compact/full responses and their implications.\n- Clarified which tools expose media fields and how to handle large responses.\n- No changes to core functionality or toolset.\n\nv1.7.0 | 2026-09-04T22:22:41.405Z | auto\n\n- Removed the file: skill-card.md\n- No other changes to functionality or documentation in this release.\n\nv1.6.0 | 2026-08-29T13:54:34.390Z | auto\n\n- Removed the file skill-card.md.  \n- No functional changes to the skill itself.  \n- Documentation and capabilities remain the same.\n\nv1.5.5 | 2026-08-28T21:07:40.151Z | auto\n\n- Removed the file: skill-card.md.\n- No other feature or documentation changes in this version.\n\nv1.5.4 | 2026-08-09T21:02:38.873Z | auto\n\n- Removed the file: skill-card.md\n- No changes to skill features or functionality.\n\nv1.5.3 | 2026-08-06T00:44:21.682Z | auto\n\n- Removed the skill documentation file skill-card.md.\n- No changes to functionality or user-facing features.\n\nv1.5.2 | 2026-07-30T12:55:03.166Z | auto\n\n- Removed the file: skill-card.md.\n- No functional changes to the skill or user experience.\n\nv1.5.1 | 2026-07-27T02:50:33.742Z | auto\n\n- Removed the file: skill-card.md\n- No changes to functionality or setup; documentation remains unchanged except for the file removal.\n\nv1.5.0 | 2026-07-27T01:26:13.073Z | auto\n\n- Removed the sample file skill-card.md.\n- No other changes to functionality or documentation.\n\nv1.4.3 | 2026-07-20T15:31:23.830Z | auto\n\n- Removed the file skill-card.md.\n- No functional or documentation changes to the skill itself.\n\nv1.4.2 | 2026-07-19T14:55:17.358Z | auto\n\n- Removed the file: skill-card.md.\n- No functional or API changes in this release.\n\nv1.4.1 | 2026-07-19T12:46:46.731Z | auto\n\n- Removed the skill-card.md file.\n- No changes to functionality or features.\n- Documentation and usage remain unchanged.\n\nv1.4.0 | 2026-07-14T21:38:30.730Z | auto\n\n- Removed the file: skill-card.md\n- No changes to functionality or setup; documentation remains the same.\n\nv1.3.2 | 2026-07-14T10:40:48.649Z | auto\n\n- Removed the file skill-card.md from the project.\n- No changes to skill functionality or setup.\n\nv1.3.1 | 2026-07-07T23:41:56.172Z | auto\n\nvibo-mcp 1.3.1\n\n- Removed the file: skill-card.md\n- No changes to features or functionality.\n\nv1.3.0 | 2026-06-16T12:44:12.245Z | auto\n\nvibo-mcp 1.3.0\n\n- Added support for single sign-on (SSO) authentication via browser capture, using the fetchproxy extension and new vibo_capture_session tool.\n- Updated authentication docs in SKILL.md to include SSO/browser capture options.\n- Documented new tool: vibo_capture_session.\n- Removed skill-card.md file.\n\nv1.2.0 | 2026-06-16T03:59:25.820Z | auto\n\nvibo-mcp 1.2.0\n\n- Expanded tool coverage: new read and write actions for managing song ideas, playlist imports, user invites/roles, comments, section updates, and profile photo uploads.\n- Documentation updated to list new tools, including:\n  - Viewing and importing DJ song idea collections per section.\n  - Managing event participants (invite, change role, remove).\n  - Additional song and section editing actions (move/reorder/remove songs, mark must-play/do-not-play, add comments/notes).\n  - Support for setting a profile photo from a local image.\n- Reorganized and clarified tool sections for easier reference.\n\nv1.1.0 | 2026-06-16T03:03:15.219Z | auto\n\nvibo-mcp 1.1.0\n\n- Expanded SKILL.md to clearly describe triggers, capabilities, and user scenarios for Vibo event music planning.\n- Added detailed setup and authentication instructions for connecting your Vibo account.\n- Listed tool capabilities for both reading and writing event, song, and playlist data.\n- Clarified the confirmation requirement for mutating actions, supporting safe dry-runs.\n- Provided an example flow to guide users through typical event music planning tasks.\n\nArchive index:\n\nArchive v2.4.3: 3 files, 5774 bytes\n\nFiles: skill-card.md (1734b), SKILL.md (9883b), _meta.json (127b)\n\nFile v2.4.3:SKILL.md\n\n---\nname: vibo-mcp\ndescription: Access your Vibo (vibodj.com) event music planning via MCP. Use when the user asks about their Vibo events, wedding/event timeline, song requests, playlists, or \"do not play\" list, or wants to add or like songs, join an event from a share link, or export songs to Spotify/Apple Music. Triggers on phrases like \"what's on my Vibo timeline\", \"add this song to the first dance\", \"what songs did guests request\", \"join this Vibo event\", or \"export our playlist to Spotify\". Requires vibo-mcp installed and the vibo server registered (see Setup below).\n---\n\n# vibo-mcp\n\nMCP server for [Vibo](https://vibodj.com) — plan your event music as a host/couple: events, timeline sections, song requests, playlists, and exports, via natural language.\n\n- **npm:** [npmjs.com/package/vibo-mcp](https://www.npmjs.com/package/vibo-mcp)\n- **Source:** [github.com/chrischall/vibo-mcp](https://github.com/chrischall/vibo-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"vibo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"vibo-mcp\"],\n      \"env\": {\n        \"VIBO_EMAIL\": \"you@example.com\",\n        \"VIBO_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}\n```\n\n### Authentication\n\nPick one:\n\n- **Email + password (recommended):** set `VIBO_EMAIL` and `VIBO_PASSWORD`. The\n  server signs in server-side and manages the token (refreshing as needed).\n- **Captured token (for Apple/Google/Facebook accounts):** set\n  `VIBO_ACCESS_TOKEN` (and `VIBO_REFRESH_TOKEN`) with values captured from a\n  signed-in `web.vibodj.com` session — no password needed.\n- **Browser capture (SSO, automatic):** with the ContextMint Bridge browser extension\n  (https://github.com/nullnet-app/contextmint-bridge/releases — the fetchproxy\n  extension renamed, same maintainer, public source; Chrome only for now)\n  installed and yourself signed into https://web.vibodj.com, run\n  `vibo_capture_session` once — it grabs the token from your tab (approve the\n  pair code), saves it to `~/.vibo-mcp/session.json`, and reuses it thereafter.\n\nThe server boots without credentials (so it can be installed and probed); the\nconfig error only appears on the first tool call.\n\n## Tools\n\n### Reads\n- `vibo_get_me` — your profile (and whether Spotify/Apple Music are connected).\n- `vibo_list_events` — your upcoming (or `past:true`) events.\n- `vibo_get_event` — full details for one event.\n- `vibo_list_sections` — an event's timeline (Ceremony, First Dance, Dinner, …).\n- `vibo_get_section_songs` — songs requested in a section, with likes/flags/comments.\n- `vibo_list_section_questions` — the DJ's planning questions for a section (type, options, current answer).\n- `vibo_search_songs` — find songs to add (Vibo catalog or connected Spotify).\n- `vibo_list_section_song_ideas` / `vibo_list_song_ideas_songs` — browse the DJ's suggested song collections per section.\n- `vibo_get_playlists` / `vibo_get_playlist_songs` — your connected-service playlists.\n- `vibo_list_event_users` — the hosts and guests on an event.\n- `vibo_list_notifications` / `vibo_get_notifications_count`.\n- `vibo_healthcheck` — confirm connectivity + auth.\n\n### Writes (confirmation-gated)\nEach mutating tool asks the user to confirm before anything is sent. Where the\nclient can show a confirmation prompt, it does. Otherwise the first call makes\n**no** network call and returns `status: \"confirmation-required\"` with a preview\nof exactly what would be sent (`preview.action` + `preview.willSend`) and a\n`confirmToken`. Show that preview to the user, and only after they approve in\nchat call the tool again with the **same arguments** plus `confirmToken`. A\ntoken works once; changing any argument is refused as `DRAFT_CHANGED` (with a\nfresh preview and token to re-approve), and a reused one as `TOKEN_REUSED`.\n`MCP_CONFIRM_MODE` (`ask-user` default / `auto` / `refuse`) controls this flow.\n\n- `vibo_add_song_to_section` — add a searched song to a section.\n- `vibo_remove_song_from_section` — every id is checked against the section first; unknown ids are listed and nothing is sent.\n- `vibo_move_song` / `vibo_reorder_songs` — reorder places `sourceSongIds` directly after `targetSongId` (omit it for the top). A host needs the section's \"hosts can order songs\" setting on — Vibo turns it off for sections a host creates, and only the DJ can turn it on.\n- `vibo_update_song` — mark must-play / do-not-play, or set a comment (at most 90 characters; an emoji counts as 2).\n- `vibo_add_song_to_section` re-reads the section after adding and errors if the song isn't actually there.\n- `vibo_toggle_song_like` — like/unlike a song.\n- `vibo_comment_on_song` / `vibo_comment_on_section` (+ delete) — leave the DJ notes.\n- `vibo_import_playlist_to_section` — pull tracks from a connected Spotify/Apple playlist.\n- `vibo_join_event` — join via a share link/hash (e.g. a `vibodj.app.link/...` URL).\n- `vibo_leave_event`.\n- `vibo_create_event_contact` — add a host/guest contact.\n- `vibo_invite_users` / `vibo_change_user_role` / `vibo_remove_user` — manage who's on the event.\n- `vibo_update_section` — edit a section's name, time, or note.\n- `vibo_create_section` — add a section (name ≤ 45 characters; `visibility` host/public; optional time and note — Vibo drops a host's description) and place it with `afterSectionId` or `position`. Returns the new `_id`.\n- `vibo_delete_section` — delete a section; the preview shows its name, song count and answered questions. `dontPlay`/`headline` sections need `force: true`.\n- `vibo_reorder_sections` — move sections to directly after `targetSectionId` (omit for the start).\n- `vibo_answer_question` — answer a planning question (text / option ids / link / image+file uploads).\n- `vibo_set_profile_photo` — set your profile photo from a local image in the upload directory (`VIBO_UPLOAD_DIR`, default `~/Downloads/vibo-mcp`).\n- `vibo_capture_session` — capture your login from a signed-in browser tab (SSO accounts).\n- `vibo_mark_notifications_read`.\n- `vibo_export_event_to_spotify` / `vibo_export_event_to_apple_music`.\n\n## Response shape (`view`)\n\n**Six of this server's 42 tools take `view: \"compact\" | \"full\"`**, and on every\none of them **`compact` is the DEFAULT**. You get the slim rung without asking.\n\nThey are exactly the six reads whose GraphQL document asks Vibo for media:\n\n| Tool | What compact drops |\n| --- | --- |\n| `vibo_search_songs` | `thumbnails { s180x180 original }` per track |\n| `vibo_get_section_songs` | `thumbnails { s180x180 original }` per song |\n| `vibo_list_song_ideas_songs` | `thumbnails { s180x180 original }` per song |\n| `vibo_list_event_users` | `email` + `imageUrl` per person — projected to `_id`/`firstName`/`lastName`/`role` on both exits (merged and filtered); `view: \"full\"` for emails |\n| `vibo_list_notifications` | `imageUrl` per notification |\n| `vibo_get_me` | `imageUrl` |\n\nThat correspondence is not a coincidence to be maintained by hand: a test in\n`tests/view.test.ts` counts the media selections in `src/gql.ts` and asserts\nthe roster of `view`-taking tools matches. Add a seventh selection and it fails.\n\n**Compact here is media stripping, not a field projection.** `src/view.ts`\nwrites no field list, because this repo holds no captured Vibo payload to\nderive one from honestly; instead it removes keys whose value is a picture,\nwhich is subtractive and so cannot drop a field nobody knew about.\n\nThe one exception is `vibo_list_event_users`: its query fixes the member field\nlist, so compact projects each member to `_id`/`firstName`/`lastName`/`role`\nand keeps other people's email addresses out of the default answer (fleet-audit\n#1136). Ask for `view: \"full\"` only when an email is actually needed.\n\nWhat compact does **not** touch is the point of these tools: `songUrl`, the\n`links` block (`spotify` / `youtube` / `appleMusic`) and the `quality` verdict\nall survive. A streaming link is this server's product, not decoration —\n`vibo_add_song_to_section` cannot add anything without `songUrl`, and the\nquality verdict is computed from how many services carry a track. A `null` link\nsurvives too: an absent key and a null one are the same to `JSON.parse` but not\nto a reader deciding whether a service was checked.\n\n`view: \"full\"` returns Vibo's payload untouched, cover art included. There is\ndeliberately **no `raw` rung**: nothing here re-serialises or normalises the\nGraphQL response, so `full` already IS the upstream payload and a third value\nwould silently alias one that exists.\n\n### The other 33 tools have no `view`\n\n- **The 24 mutating tools** (every confirmation-gated write, plus\n  `vibo_capture_session`) answer with a confirmation preview or a receipt — an id,\n  a count, a status. Nothing in a receipt is decoration, and slimming one is\n  how you lose the field that says what actually happened.\n- **`vibo_healthcheck`** answers with a connectivity/auth diagnostic. It runs\n  the same `GET_ME` document as `vibo_get_me` and still takes no rung, because\n  it never returns Vibo's user object — it builds `{ok, userId, email}` here.\n  A `view` on it would be a parameter that changes nothing.\n- **The 8 remaining reads hand back Vibo's GraphQL payload as it arrived**, and\n  their documents select no media, so there is nothing for a rung to remove.\n\nA `view` passed to a tool that does not declare one is dropped by zod without a\nwarning, so a successful call is never evidence the rung was honoured. Check\nthe table above rather than assuming.\n\n## Typical flow\n\n1. `vibo_list_events` → pick an event id.\n2. `vibo_list_sections` → pick a section id.\n3. `vibo_search_songs` → get a song's `songUrl`/`viboSongId`.\n4. `vibo_add_song_to_section` — show the user the preview it returns, then call\n   again with the `confirmToken` once they approve.\n\nFile v2.4.3:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"vibo-mcp\",\n  \"version\": \"2.4.3\",\n  \"publishedAt\": 1791380567125\n}\n\nFile v2.4.3:skill-card.md\n\n## Description:\n\nAccess Vibo event timelines, song requests, playlists, and music exports through an MCP integration.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nVibo users and their assistants can review event plans and song requests, organize music and guests, and export event playlists through their Vibo account.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The installed package can access the user's Vibo account and its event data.\n\nMitigation: Install only if you trust the vibo-mcp package and review event changes before approving them.\n\nRisk: Passwords, access tokens, refresh tokens, and saved sessions can expose the Vibo account if shared.\n\nMitigation: Keep credentials and session files private; omit secrets from shared configuration, logs, screenshots, and support bundles.\n\n## Reference(s):\n\n- [Vibo](https://vibodj.com)\n- [vibo-mcp npm package](https://www.npmjs.com/package/vibo-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Configuration instructions, Shell commands]\n\n**Output Format:** [Markdown with JSON configuration examples and tool responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Event changes require user confirmation; some read tools offer compact or full responses.]\n\n## Skill Version(s):\n\n2.4.3 (source: server-resolved release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.4.2: 3 files, 5759 bytes\n\nFiles: skill-card.md (1808b), SKILL.md (9883b), _meta.json (127b)\n\nFile v2.4.2:SKILL.md\n\n---\nname: vibo-mcp\ndescription: Access your Vibo (vibodj.com) event music planning via MCP. Use when the user asks about their Vibo events, wedding/event timeline, song requests, playlists, or \"do not play\" list, or wants to add or like songs, join an event from a share link, or export songs to Spotify/Apple Music. Triggers on phrases like \"what's on my Vibo timeline\", \"add this song to the first dance\", \"what songs did guests request\", \"join this Vibo event\", or \"export our playlist to Spotify\". Requires vibo-mcp installed and the vibo server registered (see Setup below).\n---\n\n# vibo-mcp\n\nMCP server for [Vibo](https://vibodj.com) — plan your event music as a host/couple: events, timeline sections, song requests, playlists, and exports, via natural language.\n\n- **npm:** [npmjs.com/package/vibo-mcp](https://www.npmjs.com/package/vibo-mcp)\n- **Source:** [github.com/chrischall/vibo-mcp](https://github.com/chrischall/vibo-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"vibo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"vibo-mcp\"],\n      \"env\": {\n        \"VIBO_EMAIL\": \"you@example.com\",\n        \"VIBO_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}\n```\n\n### Authentication\n\nPick one:\n\n- **Email + password (recommended):** set `VIBO_EMAIL` and `VIBO_PASSWORD`. The\n  server signs in server-side and manages the token (refreshing as needed).\n- **Captured token (for Apple/Google/Facebook accounts):** set\n  `VIBO_ACCESS_TOKEN` (and `VIBO_REFRESH_TOKEN`) with values captured from a\n  signed-in `web.vibodj.com` session — no password needed.\n- **Browser capture (SSO, automatic):** with the ContextMint Bridge browser extension\n  (https://github.com/nullnet-app/contextmint-bridge/releases — the fetchproxy\n  extension renamed, same maintainer, public source; Chrome only for now)\n  installed and yourself signed into https://web.vibodj.com, run\n  `vibo_capture_session` once — it grabs the token from your tab (approve the\n  pair code), saves it to `~/.vibo-mcp/session.json`, and reuses it thereafter.\n\nThe server boots without credentials (so it can be installed and probed); the\nconfig error only appears on the first tool call.\n\n## Tools\n\n### Reads\n- `vibo_get_me` — your profile (and whether Spotify/Apple Music are connected).\n- `vibo_list_events` — your upcoming (or `past:true`) events.\n- `vibo_get_event` — full details for one event.\n- `vibo_list_sections` — an event's timeline (Ceremony, First Dance, Dinner, …).\n- `vibo_get_section_songs` — songs requested in a section, with likes/flags/comments.\n- `vibo_list_section_questions` — the DJ's planning questions for a section (type, options, current answer).\n- `vibo_search_songs` — find songs to add (Vibo catalog or connected Spotify).\n- `vibo_list_section_song_ideas` / `vibo_list_song_ideas_songs` — browse the DJ's suggested song collections per section.\n- `vibo_get_playlists` / `vibo_get_playlist_songs` — your connected-service playlists.\n- `vibo_list_event_users` — the hosts and guests on an event.\n- `vibo_list_notifications` / `vibo_get_notifications_count`.\n- `vibo_healthcheck` — confirm connectivity + auth.\n\n### Writes (confirmation-gated)\nEach mutating tool asks the user to confirm before anything is sent. Where the\nclient can show a confirmation prompt, it does. Otherwise the first call makes\n**no** network call and returns `status: \"confirmation-required\"` with a preview\nof exactly what would be sent (`preview.action` + `preview.willSend`) and a\n`confirmToken`. Show that preview to the user, and only after they approve in\nchat call the tool again with the **same arguments** plus `confirmToken`. A\ntoken works once; changing any argument is refused as `DRAFT_CHANGED` (with a\nfresh preview and token to re-approve), and a reused one as `TOKEN_REUSED`.\n`MCP_CONFIRM_MODE` (`ask-user` default / `auto` / `refuse`) controls this flow.\n\n- `vibo_add_song_to_section` — add a searched song to a section.\n- `vibo_remove_song_from_section` — every id is checked against the section first; unknown ids are listed and nothing is sent.\n- `vibo_move_song` / `vibo_reorder_songs` — reorder places `sourceSongIds` directly after `targetSongId` (omit it for the top). A host needs the section's \"hosts can order songs\" setting on — Vibo turns it off for sections a host creates, and only the DJ can turn it on.\n- `vibo_update_song` — mark must-play / do-not-play, or set a comment (at most 90 characters; an emoji counts as 2).\n- `vibo_add_song_to_section` re-reads the section after adding and errors if the song isn't actually there.\n- `vibo_toggle_song_like` — like/unlike a song.\n- `vibo_comment_on_song` / `vibo_comment_on_section` (+ delete) — leave the DJ notes.\n- `vibo_import_playlist_to_section` — pull tracks from a connected Spotify/Apple playlist.\n- `vibo_join_event` — join via a share link/hash (e.g. a `vibodj.app.link/...` URL).\n- `vibo_leave_event`.\n- `vibo_create_event_contact` — add a host/guest contact.\n- `vibo_invite_users` / `vibo_change_user_role` / `vibo_remove_user` — manage who's on the event.\n- `vibo_update_section` — edit a section's name, time, or note.\n- `vibo_create_section` — add a section (name ≤ 45 characters; `visibility` host/public; optional time and note — Vibo drops a host's description) and place it with `afterSectionId` or `position`. Returns the new `_id`.\n- `vibo_delete_section` — delete a section; the preview shows its name, song count and answered questions. `dontPlay`/`headline` sections need `force: true`.\n- `vibo_reorder_sections` — move sections to directly after `targetSectionId` (omit for the start).\n- `vibo_answer_question` — answer a planning question (text / option ids / link / image+file uploads).\n- `vibo_set_profile_photo` — set your profile photo from a local image in the upload directory (`VIBO_UPLOAD_DIR`, default `~/Downloads/vibo-mcp`).\n- `vibo_capture_session` — capture your login from a signed-in browser tab (SSO accounts).\n- `vibo_mark_notifications_read`.\n- `vibo_export_event_to_spotify` / `vibo_export_event_to_apple_music`.\n\n## Response shape (`view`)\n\n**Six of this server's 42 tools take `view: \"compact\" | \"full\"`**, and on every\none of them **`compact` is the DEFAULT**. You get the slim rung without asking.\n\nThey are exactly the six reads whose GraphQL document asks Vibo for media:\n\n| Tool | What compact drops |\n| --- | --- |\n| `vibo_search_songs` | `thumbnails { s180x180 original }` per track |\n| `vibo_get_section_songs` | `thumbnails { s180x180 original }` per song |\n| `vibo_list_song_ideas_songs` | `thumbnails { s180x180 original }` per song |\n| `vibo_list_event_users` | `email` + `imageUrl` per person — projected to `_id`/`firstName`/`lastName`/`role` on both exits (merged and filtered); `view: \"full\"` for emails |\n| `vibo_list_notifications` | `imageUrl` per notification |\n| `vibo_get_me` | `imageUrl` |\n\nThat correspondence is not a coincidence to be maintained by hand: a test in\n`tests/view.test.ts` counts the media selections in `src/gql.ts` and asserts\nthe roster of `view`-taking tools matches. Add a seventh selection and it fails.\n\n**Compact here is media stripping, not a field projection.** `src/view.ts`\nwrites no field list, because this repo holds no captured Vibo payload to\nderive one from honestly; instead it removes keys whose value is a picture,\nwhich is subtractive and so cannot drop a field nobody knew about.\n\nThe one exception is `vibo_list_event_users`: its query fixes the member field\nlist, so compact projects each member to `_id`/`firstName`/`lastName`/`role`\nand keeps other people's email addresses out of the default answer (fleet-audit\n#1136). Ask for `view: \"full\"` only when an email is actually needed.\n\nWhat compact does **not** touch is the point of these tools: `songUrl`, the\n`links` block (`spotify` / `youtube` / `appleMusic`) and the `quality` verdict\nall survive. A streaming link is this server's product, not decoration —\n`vibo_add_song_to_section` cannot add anything without `songUrl`, and the\nquality verdict is computed from how many services carry a track. A `null` link\nsurvives too: an absent key and a null one are the same to `JSON.parse` but not\nto a reader deciding whether a service was checked.\n\n`view: \"full\"` returns Vibo's payload untouched, cover art included. There is\ndeliberately **no `raw` rung**: nothing here re-serialises or normalises the\nGraphQL response, so `full` already IS the upstream payload and a third value\nwould silently alias one that exists.\n\n### The other 33 tools have no `view`\n\n- **The 24 mutating tools** (every confirmation-gated write, plus\n  `vibo_capture_session`) answer with a confirmation preview or a receipt — an id,\n  a count, a status. Nothing in a receipt is decoration, and slimming one is\n  how you lose the field that says what actually happened.\n- **`vibo_healthcheck`** answers with a connectivity/auth diagnostic. It runs\n  the same `GET_ME` document as `vibo_get_me` and still takes no rung, because\n  it never returns Vibo's user object — it builds `{ok, userId, email}` here.\n  A `view` on it would be a parameter that changes nothing.\n- **The 8 remaining reads hand back Vibo's GraphQL payload as it arrived**, and\n  their documents select no media, so there is nothing for a rung to remove.\n\nA `view` passed to a tool that does not declare one is dropped by zod without a\nwarning, so a successful call is never evidence the rung was honoured. Check\nthe table above rather than assuming.\n\n## Typical flow\n\n1. `vibo_list_events` → pick an event id.\n2. `vibo_list_sections` → pick a section id.\n3. `vibo_search_songs` → get a song's `songUrl`/`viboSongId`.\n4. `vibo_add_song_to_section` — show the user the preview it returns, then call\n   again with the `confirmToken` once they approve.\n\nFile v2.4.2:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"vibo-mcp\",\n  \"version\": \"2.4.2\",\n  \"publishedAt\": 1791168635855\n}\n\nFile v2.4.2:skill-card.md\n\n## Description:\n\nHelps hosts and couples plan event music through Vibo by reading timelines, requests and playlists and managing songs, guests and music exports.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nEvent hosts and couples use this skill to check Vibo event timelines, song requests and playlists, and to manage songs, participants and music exports through an assistant.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Account credentials and saved session tokens can expose the user's Vibo account and connected music services.\n\nMitigation: Install only if you trust the vibo-mcp package and protect credentials and saved session tokens.\n\nRisk: Changes to events, participants, playlists or music exports may affect the user's account.\n\nMitigation: Keep the default write-confirmation mode and review each preview before approving a change.\n\n## Reference(s):\n\n- [vibo-mcp ClawHub release](https://clawhub.ai/chrischall/skills/vibo-mcp)\n- [Vibo](https://vibodj.com)\n- [vibo-mcp npm package](https://www.npmjs.com/package/vibo-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance, Configuration]\n\n**Output Format:** [Text and structured tool responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Event details and song lists; confirmation previews and receipts for account changes.]\n\n## Skill Version(s):\n\n2.4.2 (source: ClawHub release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.4.1: 3 files, 5879 bytes\n\nFiles: skill-card.md (1988b), SKILL.md (9883b), _meta.json (127b)\n\nFile v2.4.1:SKILL.md\n\n---\nname: vibo-mcp\ndescription: Access your Vibo (vibodj.com) event music planning via MCP. Use when the user asks about their Vibo events, wedding/event timeline, song requests, playlists, or \"do not play\" list, or wants to add or like songs, join an event from a share link, or export songs to Spotify/Apple Music. Triggers on phrases like \"what's on my Vibo timeline\", \"add this song to the first dance\", \"what songs did guests request\", \"join this Vibo event\", or \"export our playlist to Spotify\". Requires vibo-mcp installed and the vibo server registered (see Setup below).\n---\n\n# vibo-mcp\n\nMCP server for [Vibo](https://vibodj.com) — plan your event music as a host/couple: events, timeline sections, song requests, playlists, and exports, via natural language.\n\n- **npm:** [npmjs.com/package/vibo-mcp](https://www.npmjs.com/package/vibo-mcp)\n- **Source:** [github.com/chrischall/vibo-mcp](https://github.com/chrischall/vibo-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"vibo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"vibo-mcp\"],\n      \"env\": {\n        \"VIBO_EMAIL\": \"you@example.com\",\n        \"VIBO_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}\n```\n\n### Authentication\n\nPick one:\n\n- **Email + password (recommended):** set `VIBO_EMAIL` and `VIBO_PASSWORD`. The\n  server signs in server-side and manages the token (refreshing as needed).\n- **Captured token (for Apple/Google/Facebook accounts):** set\n  `VIBO_ACCESS_TOKEN` (and `VIBO_REFRESH_TOKEN`) with values captured from a\n  signed-in `web.vibodj.com` session — no password needed.\n- **Browser capture (SSO, automatic):** with the ContextMint Bridge browser extension\n  (https://github.com/nullnet-app/contextmint-bridge/releases — the fetchproxy\n  extension renamed, same maintainer, public source; Chrome only for now)\n  installed and yourself signed into https://web.vibodj.com, run\n  `vibo_capture_session` once — it grabs the token from your tab (approve the\n  pair code), saves it to `~/.vibo-mcp/session.json`, and reuses it thereafter.\n\nThe server boots without credentials (so it can be installed and probed); the\nconfig error only appears on the first tool call.\n\n## Tools\n\n### Reads\n- `vibo_get_me` — your profile (and whether Spotify/Apple Music are connected).\n- `vibo_list_events` — your upcoming (or `past:true`) events.\n- `vibo_get_event` — full details for one event.\n- `vibo_list_sections` — an event's timeline (Ceremony, First Dance, Dinner, …).\n- `vibo_get_section_songs` — songs requested in a section, with likes/flags/comments.\n- `vibo_list_section_questions` — the DJ's planning questions for a section (type, options, current answer).\n- `vibo_search_songs` — find songs to add (Vibo catalog or connected Spotify).\n- `vibo_list_section_song_ideas` / `vibo_list_song_ideas_songs` — browse the DJ's suggested song collections per section.\n- `vibo_get_playlists` / `vibo_get_playlist_songs` — your connected-service playlists.\n- `vibo_list_event_users` — the hosts and guests on an event.\n- `vibo_list_notifications` / `vibo_get_notifications_count`.\n- `vibo_healthcheck` — confirm connectivity + auth.\n\n### Writes (confirmation-gated)\nEach mutating tool asks the user to confirm before anything is sent. Where the\nclient can show a confirmation prompt, it does. Otherwise the first call makes\n**no** network call and returns `status: \"confirmation-required\"` with a preview\nof exactly what would be sent (`preview.action` + `preview.willSend`) and a\n`confirmToken`. Show that preview to the user, and only after they approve in\nchat call the tool again with the **same arguments** plus `confirmToken`. A\ntoken works once; changing any argument is refused as `DRAFT_CHANGED` (with a\nfresh preview and token to re-approve), and a reused one as `TOKEN_REUSED`.\n`MCP_CONFIRM_MODE` (`ask-user` default / `auto` / `refuse`) controls this flow.\n\n- `vibo_add_song_to_section` — add a searched song to a section.\n- `vibo_remove_song_from_section` — every id is checked against the section first; unknown ids are listed and nothing is sent.\n- `vibo_move_song` / `vibo_reorder_songs` — reorder places `sourceSongIds` directly after `targetSongId` (omit it for the top). A host needs the section's \"hosts can order songs\" setting on — Vibo turns it off for sections a host creates, and only the DJ can turn it on.\n- `vibo_update_song` — mark must-play / do-not-play, or set a comment (at most 90 characters; an emoji counts as 2).\n- `vibo_add_song_to_section` re-reads the section after adding and errors if the song isn't actually there.\n- `vibo_toggle_song_like` — like/unlike a song.\n- `vibo_comment_on_song` / `vibo_comment_on_section` (+ delete) — leave the DJ notes.\n- `vibo_import_playlist_to_section` — pull tracks from a connected Spotify/Apple playlist.\n- `vibo_join_event` — join via a share link/hash (e.g. a `vibodj.app.link/...` URL).\n- `vibo_leave_event`.\n- `vibo_create_event_contact` — add a host/guest contact.\n- `vibo_invite_users` / `vibo_change_user_role` / `vibo_remove_user` — manage who's on the event.\n- `vibo_update_section` — edit a section's name, time, or note.\n- `vibo_create_section` — add a section (name ≤ 45 characters; `visibility` host/public; optional time and note — Vibo drops a host's description) and place it with `afterSectionId` or `position`. Returns the new `_id`.\n- `vibo_delete_section` — delete a section; the preview shows its name, song count and answered questions. `dontPlay`/`headline` sections need `force: true`.\n- `vibo_reorder_sections` — move sections to directly after `targetSectionId` (omit for the start).\n- `vibo_answer_question` — answer a planning question (text / option ids / link / image+file uploads).\n- `vibo_set_profile_photo` — set your profile photo from a local image in the upload directory (`VIBO_UPLOAD_DIR`, default `~/Downloads/vibo-mcp`).\n- `vibo_capture_session` — capture your login from a signed-in browser tab (SSO accounts).\n- `vibo_mark_notifications_read`.\n- `vibo_export_event_to_spotify` / `vibo_export_event_to_apple_music`.\n\n## Response shape (`view`)\n\n**Six of this server's 42 tools take `view: \"compact\" | \"full\"`**, and on every\none of them **`compact` is the DEFAULT**. You get the slim rung without asking.\n\nThey are exactly the six reads whose GraphQL document asks Vibo for media:\n\n| Tool | What compact drops |\n| --- | --- |\n| `vibo_search_songs` | `thumbnails { s180x180 original }` per track |\n| `vibo_get_section_songs` | `thumbnails { s180x180 original }` per song |\n| `vibo_list_song_ideas_songs` | `thumbnails { s180x180 original }` per song |\n| `vibo_list_event_users` | `email` + `imageUrl` per person — projected to `_id`/`firstName`/`lastName`/`role` on both exits (merged and filtered); `view: \"full\"` for emails |\n| `vibo_list_notifications` | `imageUrl` per notification |\n| `vibo_get_me` | `imageUrl` |\n\nThat correspondence is not a coincidence to be maintained by hand: a test in\n`tests/view.test.ts` counts the media selections in `src/gql.ts` and asserts\nthe roster of `view`-taking tools matches. Add a seventh selection and it fails.\n\n**Compact here is media stripping, not a field projection.** `src/view.ts`\nwrites no field list, because this repo holds no captured Vibo payload to\nderive one from honestly; instead it removes keys whose value is a picture,\nwhich is subtractive and so cannot drop a field nobody knew about.\n\nThe one exception is `vibo_list_event_users`: its query fixes the member field\nlist, so compact projects each member to `_id`/`firstName`/`lastName`/`role`\nand keeps other people's email addresses out of the default answer (fleet-audit\n#1136). Ask for `view: \"full\"` only when an email is actually needed.\n\nWhat compact does **not** touch is the point of these tools: `songUrl`, the\n`links` block (`spotify` / `youtube` / `appleMusic`) and the `quality` verdict\nall survive. A streaming link is this server's product, not decoration —\n`vibo_add_song_to_section` cannot add anything without `songUrl`, and the\nquality verdict is computed from how many services carry a track. A `null` link\nsurvives too: an absent key and a null one are the same to `JSON.parse` but not\nto a reader deciding whether a service was checked.\n\n`view: \"full\"` returns Vibo's payload untouched, cover art included. There is\ndeliberately **no `raw` rung**: nothing here re-serialises or normalises the\nGraphQL response, so `full` already IS the upstream payload and a third value\nwould silently alias one that exists.\n\n### The other 33 tools have no `view`\n\n- **The 24 mutating tools** (every confirmation-gated write, plus\n  `vibo_capture_session`) answer with a confirmation preview or a receipt — an id,\n  a count, a status. Nothing in a receipt is decoration, and slimming one is\n  how you lose the field that says what actually happened.\n- **`vibo_healthcheck`** answers with a connectivity/auth diagnostic. It runs\n  the same `GET_ME` document as `vibo_get_me` and still takes no rung, because\n  it never returns Vibo's user object — it builds `{ok, userId, email}` here.\n  A `view` on it would be a parameter that changes nothing.\n- **The 8 remaining reads hand back Vibo's GraphQL payload as it arrived**, and\n  their documents select no media, so there is nothing for a rung to remove.\n\nA `view` passed to a tool that does not declare one is dropped by zod without a\nwarning, so a successful call is never evidence the rung was honoured. Check\nthe table above rather than assuming.\n\n## Typical flow\n\n1. `vibo_list_events` → pick an event id.\n2. `vibo_list_sections` → pick a section id.\n3. `vibo_search_songs` → get a song's `songUrl`/`viboSongId`.\n4. `vibo_add_song_to_section` — show the user the preview it returns, then call\n   again with the `confirmToken` once they approve.\n\nFile v2.4.1:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"vibo-mcp\",\n  \"version\": \"2.4.1\",\n  \"publishedAt\": 1790991773976\n}\n\nFile v2.4.1:skill-card.md\n\n## Description:\n\nConnects an agent to Vibo to review and manage event timelines, song requests, playlists, and music exports.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nEvent hosts and couples use this skill to review Vibo event plans and song requests, update timelines and playlists, and export music to connected services.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Vibo account passwords or captured session tokens may be stored locally and exposed through shared or committed configuration files.\n\nMitigation: Use private, non-synced MCP configuration; never commit credentials, and treat the saved browser session file like a password.\n\nRisk: Event edits, invitations, or exports can affect real events if approved without review.\n\nMitigation: Keep the default ask-user confirmation mode and review each action preview before approving it.\n\n## Reference(s):\n\n- [Vibo](https://vibodj.com)\n- [vibo-mcp npm package](https://www.npmjs.com/package/vibo-mcp)\n- [vibo-mcp source repository (linked in skill)](https://github.com/chrischall/vibo-mcp)\n- [ContextMint Bridge browser extension](https://github.com/nullnet-app/contextmint-bridge/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Configuration guidance]\n\n**Output Format:** [Markdown responses and structured tool results]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read results may omit media by default; changes require a confirmation preview unless the confirmation mode is changed.]\n\n## Skill Version(s):\n\n2.4.1 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.4.0: 3 files, 5908 bytes\n\nFiles: skill-card.md (2036b), SKILL.md (9883b), _meta.json (127b)\n\nFile v2.4.0:SKILL.md\n\n---\nname: vibo-mcp\ndescription: Access your Vibo (vibodj.com) event music planning via MCP. Use when the user asks about their Vibo events, wedding/event timeline, song requests, playlists, or \"do not play\" list, or wants to add or like songs, join an event from a share link, or export songs to Spotify/Apple Music. Triggers on phrases like \"what's on my Vibo timeline\", \"add this song to the first dance\", \"what songs did guests request\", \"join this Vibo event\", or \"export our playlist to Spotify\". Requires vibo-mcp installed and the vibo server registered (see Setup below).\n---\n\n# vibo-mcp\n\nMCP server for [Vibo](https://vibodj.com) — plan your event music as a host/couple: events, timeline sections, song requests, playlists, and exports, via natural language.\n\n- **npm:** [npmjs.com/package/vibo-mcp](https://www.npmjs.com/package/vibo-mcp)\n- **Source:** [github.com/chrischall/vibo-mcp](https://github.com/chrischall/vibo-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"vibo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"vibo-mcp\"],\n      \"env\": {\n        \"VIBO_EMAIL\": \"you@example.com\",\n        \"VIBO_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}\n```\n\n### Authentication\n\nPick one:\n\n- **Email + password (recommended):** set `VIBO_EMAIL` and `VIBO_PASSWORD`. The\n  server signs in server-side and manages the token (refreshing as needed).\n- **Captured token (for Apple/Google/Facebook accounts):** set\n  `VIBO_ACCESS_TOKEN` (and `VIBO_REFRESH_TOKEN`) with values captured from a\n  signed-in `web.vibodj.com` session — no password needed.\n- **Browser capture (SSO, automatic):** with the ContextMint Bridge browser extension\n  (https://github.com/nullnet-app/contextmint-bridge/releases — the fetchproxy\n  extension renamed, same maintainer, public source; Chrome only for now)\n  installed and yourself signed into https://web.vibodj.com, run\n  `vibo_capture_session` once — it grabs the token from your tab (approve the\n  pair code), saves it to `~/.vibo-mcp/session.json`, and reuses it thereafter.\n\nThe server boots without credentials (so it can be installed and probed); the\nconfig error only appears on the first tool call.\n\n## Tools\n\n### Reads\n- `vibo_get_me` — your profile (and whether Spotify/Apple Music are connected).\n- `vibo_list_events` — your upcoming (or `past:true`) events.\n- `vibo_get_event` — full details for one event.\n- `vibo_list_sections` — an event's timeline (Ceremony, First Dance, Dinner, …).\n- `vibo_get_section_songs` — songs requested in a section, with likes/flags/comments.\n- `vibo_list_section_questions` — the DJ's planning questions for a section (type, options, current answer).\n- `vibo_search_songs` — find songs to add (Vibo catalog or connected Spotify).\n- `vibo_list_section_song_ideas` / `vibo_list_song_ideas_songs` — browse the DJ's suggested song collections per section.\n- `vibo_get_playlists` / `vibo_get_playlist_songs` — your connected-service playlists.\n- `vibo_list_event_users` — the hosts and guests on an event.\n- `vibo_list_notifications` / `vibo_get_notifications_count`.\n- `vibo_healthcheck` — confirm connectivity + auth.\n\n### Writes (confirmation-gated)\nEach mutating tool asks the user to confirm before anything is sent. Where the\nclient can show a confirmation prompt, it does. Otherwise the first call makes\n**no** network call and returns `status: \"confirmation-required\"` with a preview\nof exactly what would be sent (`preview.action` + `preview.willSend`) and a\n`confirmToken`. Show that preview to the user, and only after they approve in\nchat call the tool again with the **same arguments** plus `confirmToken`. A\ntoken works once; changing any argument is refused as `DRAFT_CHANGED` (with a\nfresh preview and token to re-approve), and a reused one as `TOKEN_REUSED`.\n`MCP_CONFIRM_MODE` (`ask-user` default / `auto` / `refuse`) controls this flow.\n\n- `vibo_add_song_to_section` — add a searched song to a section.\n- `vibo_remove_song_from_section` — every id is checked against the section first; unknown ids are listed and nothing is sent.\n- `vibo_move_song` / `vibo_reorder_songs` — reorder places `sourceSongIds` directly after `targetSongId` (omit it for the top). A host needs the section's \"hosts can order songs\" setting on — Vibo turns it off for sections a host creates, and only the DJ can turn it on.\n- `vibo_update_song` — mark must-play / do-not-play, or set a comment (at most 90 characters; an emoji counts as 2).\n- `vibo_add_song_to_section` re-reads the section after adding and errors if the song isn't actually there.\n- `vibo_toggle_song_like` — like/unlike a song.\n- `vibo_comment_on_song` / `vibo_comment_on_section` (+ delete) — leave the DJ notes.\n- `vibo_import_playlist_to_section` — pull tracks from a connected Spotify/Apple playlist.\n- `vibo_join_event` — join via a share link/hash (e.g. a `vibodj.app.link/...` URL).\n- `vibo_leave_event`.\n- `vibo_create_event_contact` — add a host/guest contact.\n- `vibo_invite_users` / `vibo_change_user_role` / `vibo_remove_user` — manage who's on the event.\n- `vibo_update_section` — edit a section's name, time, or note.\n- `vibo_create_section` — add a section (name ≤ 45 characters; `visibility` host/public; optional time and note — Vibo drops a host's description) and place it with `afterSectionId` or `position`. Returns the new `_id`.\n- `vibo_delete_section` — delete a section; the preview shows its name, song count and answered questions. `dontPlay`/`headline` sections need `force: true`.\n- `vibo_reorder_sections` — move sections to directly after `targetSectionId` (omit for the start).\n- `vibo_answer_question` — answer a planning question (text / option ids / link / image+file uploads).\n- `vibo_set_profile_photo` — set your profile photo from a local image in the upload directory (`VIBO_UPLOAD_DIR`, default `~/Downloads/vibo-mcp`).\n- `vibo_capture_session` — capture your login from a signed-in browser tab (SSO accounts).\n- `vibo_mark_notifications_read`.\n- `vibo_export_event_to_spotify` / `vibo_export_event_to_apple_music`.\n\n## Response shape (`view`)\n\n**Six of this server's 42 tools take `view: \"compact\" | \"full\"`**, and on every\none of them **`compact` is the DEFAULT**. You get the slim rung without asking.\n\nThey are exactly the six reads whose GraphQL document asks Vibo for media:\n\n| Tool | What compact drops |\n| --- | --- |\n| `vibo_search_songs` | `thumbnails { s180x180 original }` per track |\n| `vibo_get_section_songs` | `thumbnails { s180x180 original }` per song |\n| `vibo_list_song_ideas_songs` | `thumbnails { s180x180 original }` per song |\n| `vibo_list_event_users` | `email` + `imageUrl` per person — projected to `_id`/`firstName`/`lastName`/`role` on both exits (merged and filtered); `view: \"full\"` for emails |\n| `vibo_list_notifications` | `imageUrl` per notification |\n| `vibo_get_me` | `imageUrl` |\n\nThat correspondence is not a coincidence to be maintained by hand: a test in\n`tests/view.test.ts` counts the media selections in `src/gql.ts` and asserts\nthe roster of `view`-taking tools matches. Add a seventh selection and it fails.\n\n**Compact here is media stripping, not a field projection.** `src/view.ts`\nwrites no field list, because this repo holds no captured Vibo payload to\nderive one from honestly; instead it removes keys whose value is a picture,\nwhich is subtractive and so cannot drop a field nobody knew about.\n\nThe one exception is `vibo_list_event_users`: its query fixes the member field\nlist, so compact projects each member to `_id`/`firstName`/`lastName`/`role`\nand keeps other people's email addresses out of the default answer (fleet-audit\n#1136). Ask for `view: \"full\"` only when an email is actually needed.\n\nWhat compact does **not** touch is the point of these tools: `songUrl`, the\n`links` block (`spotify` / `youtube` / `appleMusic`) and the `quality` verdict\nall survive. A streaming link is this server's product, not decoration —\n`vibo_add_song_to_section` cannot add anything without `songUrl`, and the\nquality verdict is computed from how many services carry a track. A `null` link\nsurvives too: an absent key and a null one are the same to `JSON.parse` but not\nto a reader deciding whether a service was checked.\n\n`view: \"full\"` returns Vibo's payload untouched, cover art included. There is\ndeliberately **no `raw` rung**: nothing here re-serialises or normalises the\nGraphQL response, so `full` already IS the upstream payload and a third value\nwould silently alias one that exists.\n\n### The other 33 tools have no `view`\n\n- **The 24 mutating tools** (every confirmation-gated write, plus\n  `vibo_capture_session`) answer with a confirmation preview or a receipt — an id,\n  a count, a status. Nothing in a receipt is decoration, and slimming one is\n  how you lose the field that says what actually happened.\n- **`vibo_healthcheck`** answers with a connectivity/auth diagnostic. It runs\n  the same `GET_ME` document as `vibo_get_me` and still takes no rung, because\n  it never returns Vibo's user object — it builds `{ok, userId, email}` here.\n  A `view` on it would be a parameter that changes nothing.\n- **The 8 remaining reads hand back Vibo's GraphQL payload as it arrived**, and\n  their documents select no media, so there is nothing for a rung to remove.\n\nA `view` passed to a tool that does not declare one is dropped by zod without a\nwarning, so a successful call is never evidence the rung was honoured. Check\nthe table above rather than assuming.\n\n## Typical flow\n\n1. `vibo_list_events` → pick an event id.\n2. `vibo_list_sections` → pick a section id.\n3. `vibo_search_songs` → get a song's `songUrl`/`viboSongId`.\n4. `vibo_add_song_to_section` — show the user the preview it returns, then call\n   again with the `confirmToken` once they approve.\n\nFile v2.4.0:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"vibo-mcp\",\n  \"version\": \"2.4.0\",\n  \"publishedAt\": 1790572270373\n}\n\nFile v2.4.0:skill-card.md\n\n## Description:\n\nHelps Vibo hosts plan event music and manage timelines, song requests, playlists, and exports through an MCP server.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nVibo event hosts and their assistants use this skill to review event timelines, coordinate music requests and playlists, and make approved changes to event plans or connected music services.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Vibo credentials and saved session tokens could expose account and connected music-service data.\n\nMitigation: Protect passwords and tokens, and configure the server only in projects that need Vibo access.\n\nRisk: Running an unpinned npm package may execute a changed release.\n\nMitigation: Review the npm package before installation and pin a reviewed version when possible.\n\nRisk: Event changes, user-role edits, section deletion, and playlist exports can affect shared plans or connected services.\n\nMitigation: Keep the default confirmation flow enabled and review each change preview before approving it.\n\n## Reference(s):\n\n- [Vibo](https://vibodj.com)\n- [vibo-mcp npm package](https://www.npmjs.com/package/vibo-mcp)\n- [ContextMint Bridge browser extension releases](https://github.com/nullnet-app/contextmint-bridge/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance, API calls]\n\n**Output Format:** [Markdown guidance and structured MCP tool responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Reads return event and music data; changes return confirmation previews or receipts.]\n\n## Skill Version(s):\n\n2.4.0 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.3.1: 3 files, 5357 bytes\n\nFiles: skill-card.md (1863b), SKILL.md (8751b), _meta.json (127b)\n\nFile v2.3.1:SKILL.md\n\n---\nname: vibo-mcp\ndescription: Access your Vibo (vibodj.com) event music planning via MCP. Use when the user asks about their Vibo events, wedding/event timeline, song requests, playlists, or \"do not play\" list, or wants to add or like songs, join an event from a share link, or export songs to Spotify/Apple Music. Triggers on phrases like \"what's on my Vibo timeline\", \"add this song to the first dance\", \"what songs did guests request\", \"join this Vibo event\", or \"export our playlist to Spotify\". Requires vibo-mcp installed and the vibo server registered (see Setup below).\n---\n\n# vibo-mcp\n\nMCP server for [Vibo](https://vibodj.com) — plan your event music as a host/couple: events, timeline sections, song requests, playlists, and exports, via natural language.\n\n- **npm:** [npmjs.com/package/vibo-mcp](https://www.npmjs.com/package/vibo-mcp)\n- **Source:** [github.com/chrischall/vibo-mcp](https://github.com/chrischall/vibo-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"vibo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"vibo-mcp\"],\n      \"env\": {\n        \"VIBO_EMAIL\": \"you@example.com\",\n        \"VIBO_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}\n```\n\n### Authentication\n\nPick one:\n\n- **Email + password (recommended):** set `VIBO_EMAIL` and `VIBO_PASSWORD`. The\n  server signs in server-side and manages the token (refreshing as needed).\n- **Captured token (for Apple/Google/Facebook accounts):** set\n  `VIBO_ACCESS_TOKEN` (and `VIBO_REFRESH_TOKEN`) with values captured from a\n  signed-in `web.vibodj.com` session — no password needed.\n- **Browser capture (SSO, automatic):** with the fetchproxy browser extension\n  installed and yourself signed into https://web.vibodj.com, run\n  `vibo_capture_session` once — it grabs the token from your tab (approve the\n  pair code), saves it to `~/.vibo-mcp/session.json`, and reuses it thereafter.\n\nThe server boots without credentials (so it can be installed and probed); the\nconfig error only appears on the first tool call.\n\n## Tools\n\n### Reads\n- `vibo_get_me` — your profile (and whether Spotify/Apple Music are connected).\n- `vibo_list_events` — your upcoming (or `past:true`) events.\n- `vibo_get_event` — full details for one event.\n- `vibo_list_sections` — an event's timeline (Ceremony, First Dance, Dinner, …).\n- `vibo_get_section_songs` — songs requested in a section, with likes/flags/comments.\n- `vibo_list_section_questions` — the DJ's planning questions for a section (type, options, current answer).\n- `vibo_search_songs` — find songs to add (Vibo catalog or connected Spotify).\n- `vibo_list_section_song_ideas` / `vibo_list_song_ideas_songs` — browse the DJ's suggested song collections per section.\n- `vibo_get_playlists` / `vibo_get_playlist_songs` — your connected-service playlists.\n- `vibo_list_event_users` — the hosts and guests on an event.\n- `vibo_list_notifications` / `vibo_get_notifications_count`.\n- `vibo_healthcheck` — confirm connectivity + auth.\n\n### Writes (confirmation-gated)\nEach mutating tool asks the user to confirm before anything is sent. Where the\nclient can show a confirmation prompt, it does. Otherwise the first call makes\n**no** network call and returns `status: \"confirmation-required\"` with a preview\nof exactly what would be sent (`preview.action` + `preview.willSend`) and a\n`confirmToken`. Show that preview to the user, and only after they approve in\nchat call the tool again with the **same arguments** plus `confirmToken`. A\ntoken works once; changing any argument is refused as `DRAFT_CHANGED` (with a\nfresh preview and token to re-approve), and a reused one as `TOKEN_REUSED`.\n`MCP_CONFIRM_MODE` (`ask-user` default / `auto` / `refuse`) controls this flow.\n\n- `vibo_add_song_to_section` — add a searched song to a section.\n- `vibo_remove_song_from_section` / `vibo_move_song` / `vibo_reorder_songs`.\n- `vibo_update_song` — mark must-play / do-not-play, or set a comment.\n- `vibo_toggle_song_like` — like/unlike a song.\n- `vibo_comment_on_song` / `vibo_comment_on_section` (+ delete) — leave the DJ notes.\n- `vibo_import_playlist_to_section` — pull tracks from a connected Spotify/Apple playlist.\n- `vibo_join_event` — join via a share link/hash (e.g. a `vibodj.app.link/...` URL).\n- `vibo_leave_event`.\n- `vibo_create_event_contact` — add a host/guest contact.\n- `vibo_invite_users` / `vibo_change_user_role` / `vibo_remove_user` — manage who's on the event.\n- `vibo_update_section` — edit a section's name, time, or note.\n- `vibo_answer_question` — answer a planning question (text / option ids / link / image+file uploads).\n- `vibo_set_profile_photo` — set your profile photo from a local image in the upload directory (`VIBO_UPLOAD_DIR`, default `~/Downloads/vibo-mcp`).\n- `vibo_capture_session` — capture your login from a signed-in browser tab (SSO accounts).\n- `vibo_mark_notifications_read`.\n- `vibo_export_event_to_spotify` / `vibo_export_event_to_apple_music`.\n\n## Response shape (`view`)\n\n**Six of this server's 39 tools take `view: \"compact\" | \"full\"`**, and on every\none of them **`compact` is the DEFAULT**. You get the slim rung without asking.\n\nThey are exactly the six reads whose GraphQL document asks Vibo for media:\n\n| Tool | What compact drops |\n| --- | --- |\n| `vibo_search_songs` | `thumbnails { s180x180 original }` per track |\n| `vibo_get_section_songs` | `thumbnails { s180x180 original }` per song |\n| `vibo_list_song_ideas_songs` | `thumbnails { s180x180 original }` per song |\n| `vibo_list_event_users` | `email` + `imageUrl` per person — projected to `_id`/`firstName`/`lastName`/`role` on both exits (merged and filtered); `view: \"full\"` for emails |\n| `vibo_list_notifications` | `imageUrl` per notification |\n| `vibo_get_me` | `imageUrl` |\n\nThat correspondence is not a coincidence to be maintained by hand: a test in\n`tests/view.test.ts` counts the media selections in `src/gql.ts` and asserts\nthe roster of `view`-taking tools matches. Add a seventh selection and it fails.\n\n**Compact here is media stripping, not a field projection.** `src/view.ts`\nwrites no field list, because this repo holds no captured Vibo payload to\nderive one from honestly; instead it removes keys whose value is a picture,\nwhich is subtractive and so cannot drop a field nobody knew about.\n\nThe one exception is `vibo_list_event_users`: its query fixes the member field\nlist, so compact projects each member to `_id`/`firstName`/`lastName`/`role`\nand keeps other people's email addresses out of the default answer (fleet-audit\n#1136). Ask for `view: \"full\"` only when an email is actually needed.\n\nWhat compact does **not** touch is the point of these tools: `songUrl`, the\n`links` block (`spotify` / `youtube` / `appleMusic`) and the `quality` verdict\nall survive. A streaming link is this server's product, not decoration —\n`vibo_add_song_to_section` cannot add anything without `songUrl`, and the\nquality verdict is computed from how many services carry a track. A `null` link\nsurvives too: an absent key and a null one are the same to `JSON.parse` but not\nto a reader deciding whether a service was checked.\n\n`view: \"full\"` returns Vibo's payload untouched, cover art included. There is\ndeliberately **no `raw` rung**: nothing here re-serialises or normalises the\nGraphQL response, so `full` already IS the upstream payload and a third value\nwould silently alias one that exists.\n\n### The other 33 tools have no `view`\n\n- **The 24 mutating tools** (every confirmation-gated write, plus\n  `vibo_capture_session`) answer with a confirmation preview or a receipt — an id,\n  a count, a status. Nothing in a receipt is decoration, and slimming one is\n  how you lose the field that says what actually happened.\n- **`vibo_healthcheck`** answers with a connectivity/auth diagnostic. It runs\n  the same `GET_ME` document as `vibo_get_me` and still takes no rung, because\n  it never returns Vibo's user object — it builds `{ok, userId, email}` here.\n  A `view` on it would be a parameter that changes nothing.\n- **The 8 remaining reads hand back Vibo's GraphQL payload as it arrived**, and\n  their documents select no media, so there is nothing for a rung to remove.\n\nA `view` passed to a tool that does not declare one is dropped by zod without a\nwarning, so a successful call is never evidence the rung was honoured. Check\nthe table above rather than assuming.\n\n## Typical flow\n\n1. `vibo_list_events` → pick an event id.\n2. `vibo_list_sections` → pick a section id.\n3. `vibo_search_songs` → get a song's `songUrl`/`viboSongId`.\n4. `vibo_add_song_to_section` — show the user the preview it returns, then call\n   again with the `confirmToken` once they approve.\n\nFile v2.3.1:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"vibo-mcp\",\n  \"version\": \"2.3.1\",\n  \"publishedAt\": 1790351451867\n}\n\nFile v2.3.1:skill-card.md\n\n## Description:\n\nHelps people plan Vibo event music through an MCP server, including timelines, song requests, playlists, and music-service exports.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nVibo hosts and event planners use the skill to review event timelines and song requests, organize playlists, manage event participation, and export music to connected services.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Vibo account credentials and captured session tokens may be stored in local configuration files and exposed if those files are shared.\n\nMitigation: Keep credential files out of repositories and sync folders, restrict file permissions, and rotate or revoke credentials if exposed.\n\nRisk: Event membership, song lists, and planning details can be changed through write tools.\n\nMitigation: Review each proposed change and its confirmation preview before approving it.\n\n## Reference(s):\n\n- [vibo-mcp on ClawHub](https://clawhub.ai/chrischall/skills/vibo-mcp)\n- [Vibo](https://vibodj.com)\n- [vibo-mcp npm package](https://www.npmjs.com/package/vibo-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance, Configuration instructions]\n\n**Output Format:** [Markdown and structured tool responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read responses may use compact or full views; event changes require user confirmation.]\n\n## Skill Version(s):\n\n2.3.1 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.3.0: 3 files, 5321 bytes\n\nFiles: skill-card.md (2138b), SKILL.md (8355b), _meta.json (127b)\n\nFile v2.3.0:SKILL.md\n\n---\nname: vibo-mcp\ndescription: Access your Vibo (vibodj.com) event music planning via MCP. Use when the user asks about their Vibo events, wedding/event timeline, song requests, playlists, or \"do not play\" list, or wants to add or like songs, join an event from a share link, or export songs to Spotify/Apple Music. Triggers on phrases like \"what's on my Vibo timeline\", \"add this song to the first dance\", \"what songs did guests request\", \"join this Vibo event\", or \"export our playlist to Spotify\". Requires vibo-mcp installed and the vibo server registered (see Setup below).\n---\n\n# vibo-mcp\n\nMCP server for [Vibo](https://vibodj.com) — plan your event music as a host/couple: events, timeline sections, song requests, playlists, and exports, via natural language.\n\n- **npm:** [npmjs.com/package/vibo-mcp](https://www.npmjs.com/package/vibo-mcp)\n- **Source:** [github.com/chrischall/vibo-mcp](https://github.com/chrischall/vibo-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"vibo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"vibo-mcp\"],\n      \"env\": {\n        \"VIBO_EMAIL\": \"you@example.com\",\n        \"VIBO_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}\n```\n\n### Authentication\n\nPick one:\n\n- **Email + password (recommended):** set `VIBO_EMAIL` and `VIBO_PASSWORD`. The\n  server signs in server-side and manages the token (refreshing as needed).\n- **Captured token (for Apple/Google/Facebook accounts):** set\n  `VIBO_ACCESS_TOKEN` (and `VIBO_REFRESH_TOKEN`) with values captured from a\n  signed-in `web.vibodj.com` session — no password needed.\n- **Browser capture (SSO, automatic):** with the fetchproxy browser extension\n  installed and yourself signed into https://web.vibodj.com, run\n  `vibo_capture_session` once — it grabs the token from your tab (approve the\n  pair code), saves it to `~/.vibo-mcp/session.json`, and reuses it thereafter.\n\nThe server boots without credentials (so it can be installed and probed); the\nconfig error only appears on the first tool call.\n\n## Tools\n\n### Reads\n- `vibo_get_me` — your profile (and whether Spotify/Apple Music are connected).\n- `vibo_list_events` — your upcoming (or `past:true`) events.\n- `vibo_get_event` — full details for one event.\n- `vibo_list_sections` — an event's timeline (Ceremony, First Dance, Dinner, …).\n- `vibo_get_section_songs` — songs requested in a section, with likes/flags/comments.\n- `vibo_list_section_questions` — the DJ's planning questions for a section (type, options, current answer).\n- `vibo_search_songs` — find songs to add (Vibo catalog or connected Spotify).\n- `vibo_list_section_song_ideas` / `vibo_list_song_ideas_songs` — browse the DJ's suggested song collections per section.\n- `vibo_get_playlists` / `vibo_get_playlist_songs` — your connected-service playlists.\n- `vibo_list_event_users` — the hosts and guests on an event.\n- `vibo_list_notifications` / `vibo_get_notifications_count`.\n- `vibo_healthcheck` — confirm connectivity + auth.\n\n### Writes (confirmation-gated)\nEach mutating tool asks the user to confirm before anything is sent. Where the\nclient can show a confirmation prompt, it does. Otherwise the first call makes\n**no** network call and returns `status: \"confirmation-required\"` with a preview\nof exactly what would be sent (`preview.action` + `preview.willSend`) and a\n`confirmToken`. Show that preview to the user, and only after they approve in\nchat call the tool again with the **same arguments** plus `confirmToken`. A\ntoken works once; changing any argument is refused as `DRAFT_CHANGED` (with a\nfresh preview and token to re-approve), and a reused one as `TOKEN_REUSED`.\n`MCP_CONFIRM_MODE` (`ask-user` default / `auto` / `refuse`) controls this flow.\n\n- `vibo_add_song_to_section` — add a searched song to a section.\n- `vibo_remove_song_from_section` / `vibo_move_song` / `vibo_reorder_songs`.\n- `vibo_update_song` — mark must-play / do-not-play, or set a comment.\n- `vibo_toggle_song_like` — like/unlike a song.\n- `vibo_comment_on_song` / `vibo_comment_on_section` (+ delete) — leave the DJ notes.\n- `vibo_import_playlist_to_section` — pull tracks from a connected Spotify/Apple playlist.\n- `vibo_join_event` — join via a share link/hash (e.g. a `vibodj.app.link/...` URL).\n- `vibo_leave_event`.\n- `vibo_create_event_contact` — add a host/guest contact.\n- `vibo_invite_users` / `vibo_change_user_role` / `vibo_remove_user` — manage who's on the event.\n- `vibo_update_section` — edit a section's name, time, or note.\n- `vibo_answer_question` — answer a planning question (text / option ids / link / image+file uploads).\n- `vibo_set_profile_photo` — set your profile photo from a local image in the upload directory (`VIBO_UPLOAD_DIR`, default `~/Downloads/vibo-mcp`).\n- `vibo_capture_session` — capture your login from a signed-in browser tab (SSO accounts).\n- `vibo_mark_notifications_read`.\n- `vibo_export_event_to_spotify` / `vibo_export_event_to_apple_music`.\n\n## Response shape (`view`)\n\n**Six of this server's 39 tools take `view: \"compact\" | \"full\"`**, and on every\none of them **`compact` is the DEFAULT**. You get the slim rung without asking.\n\nThey are exactly the six reads whose GraphQL document asks Vibo for media:\n\n| Tool | What compact drops |\n| --- | --- |\n| `vibo_search_songs` | `thumbnails { s180x180 original }` per track |\n| `vibo_get_section_songs` | `thumbnails { s180x180 original }` per song |\n| `vibo_list_song_ideas_songs` | `thumbnails { s180x180 original }` per song |\n| `vibo_list_event_users` | `imageUrl` per person (both exits — merged and filtered) |\n| `vibo_list_notifications` | `imageUrl` per notification |\n| `vibo_get_me` | `imageUrl` |\n\nThat correspondence is not a coincidence to be maintained by hand: a test in\n`tests/view.test.ts` counts the media selections in `src/gql.ts` and asserts\nthe roster of `view`-taking tools matches. Add a seventh selection and it fails.\n\n**Compact here is media stripping, not a field projection.** `src/view.ts`\nwrites no field list, because this repo holds no captured Vibo payload to\nderive one from honestly; instead it removes keys whose value is a picture,\nwhich is subtractive and so cannot drop a field nobody knew about.\n\nWhat compact does **not** touch is the point of these tools: `songUrl`, the\n`links` block (`spotify` / `youtube` / `appleMusic`) and the `quality` verdict\nall survive. A streaming link is this server's product, not decoration —\n`vibo_add_song_to_section` cannot add anything without `songUrl`, and the\nquality verdict is computed from how many services carry a track. A `null` link\nsurvives too: an absent key and a null one are the same to `JSON.parse` but not\nto a reader deciding whether a service was checked.\n\n`view: \"full\"` returns Vibo's payload untouched, cover art included. There is\ndeliberately **no `raw` rung**: nothing here re-serialises or normalises the\nGraphQL response, so `full` already IS the upstream payload and a third value\nwould silently alias one that exists.\n\n### The other 33 tools have no `view`\n\n- **The 24 mutating tools** (every confirmation-gated write, plus\n  `vibo_capture_session`) answer with a confirmation preview or a receipt — an id,\n  a count, a status. Nothing in a receipt is decoration, and slimming one is\n  how you lose the field that says what actually happened.\n- **`vibo_healthcheck`** answers with a connectivity/auth diagnostic. It runs\n  the same `GET_ME` document as `vibo_get_me` and still takes no rung, because\n  it never returns Vibo's user object — it builds `{ok, userId, email}` here.\n  A `view` on it would be a parameter that changes nothing.\n- **The 8 remaining reads hand back Vibo's GraphQL payload as it arrived**, and\n  their documents select no media, so there is nothing for a rung to remove.\n\nA `view` passed to a tool that does not declare one is dropped by zod without a\nwarning, so a successful call is never evidence the rung was honoured. Check\nthe table above rather than assuming.\n\n## Typical flow\n\n1. `vibo_list_events` → pick an event id.\n2. `vibo_list_sections` → pick a section id.\n3. `vibo_search_songs` → get a song's `songUrl`/`viboSongId`.\n4. `vibo_add_song_to_section` — show the user the preview it returns, then call\n   again with the `confirmToken` once they approve.\n\nFile v2.3.0:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"vibo-mcp\",\n  \"version\": \"2.3.0\",\n  \"publishedAt\": 1790262716785\n}\n\nFile v2.3.0:skill-card.md\n\n## Description:\n\nAccess your Vibo event music planning through MCP for events, timelines, song requests, playlists, do-not-play lists, joins, song updates, and exports to Spotify or Apple Music.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to connect an agent to their Vibo account, inspect event music planning data, manage timeline sections and song requests, and export event playlists through the vibo-mcp server.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The MCP server uses Vibo credentials, access tokens, refresh tokens, and a local session file that can grant account access if exposed.\n\nMitigation: Treat VIBO_PASSWORD, VIBO_ACCESS_TOKEN, VIBO_REFRESH_TOKEN, and ~/.vibo-mcp/session.json as secrets, and avoid sharing MCP configuration files.\n\nRisk: Mutating Vibo tools can change event music planning data, contacts, comments, notifications, exports, and related account state.\n\nMitigation: Keep confirmation mode on ask-user so account-changing actions require an explicit preview and approval before execution.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/chrischall/skills/vibo-mcp)\n- [Vibo](https://vibodj.com)\n- [vibo-mcp npm Package](https://www.npmjs.com/package/vibo-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, configuration, shell commands, guidance]\n\n**Output Format:** [Markdown with JSON configuration snippets and MCP tool guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read tools can return compact or full views where supported; mutating tools use confirmation previews before account-changing actions.]\n\n## Skill Version(s):\n\n2.3.0 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.2.3: 3 files, 4981 bytes\n\nFiles: skill-card.md (2108b), SKILL.md (7694b), _meta.json (127b)\n\nFile v2.2.3:SKILL.md\n\n---\nname: vibo-mcp\ndescription: Access your Vibo (vibodj.com) event music planning via MCP. Use when the user asks about their Vibo events, wedding/event timeline, song requests, playlists, or \"do not play\" list, or wants to add or like songs, join an event from a share link, or export songs to Spotify/Apple Music. Triggers on phrases like \"what's on my Vibo timeline\", \"add this song to the first dance\", \"what songs did guests request\", \"join this Vibo event\", or \"export our playlist to Spotify\". Requires vibo-mcp installed and the vibo server registered (see Setup below).\n---\n\n# vibo-mcp\n\nMCP server for [Vibo](https://vibodj.com) — plan your event music as a host/couple: events, timeline sections, song requests, playlists, and exports, via natural language.\n\n- **npm:** [npmjs.com/package/vibo-mcp](https://www.npmjs.com/package/vibo-mcp)\n- **Source:** [github.com/chrischall/vibo-mcp](https://github.com/chrischall/vibo-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"vibo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"vibo-mcp\"],\n      \"env\": {\n        \"VIBO_EMAIL\": \"you@example.com\",\n        \"VIBO_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}\n```\n\n### Authentication\n\nPick one:\n\n- **Email + password (recommended):** set `VIBO_EMAIL` and `VIBO_PASSWORD`. The\n  server signs in server-side and manages the token (refreshing as needed).\n- **Captured token (for Apple/Google/Facebook accounts):** set\n  `VIBO_ACCESS_TOKEN` (and `VIBO_REFRESH_TOKEN`) with values captured from a\n  signed-in `web.vibodj.com` session — no password needed.\n- **Browser capture (SSO, automatic):** with the fetchproxy browser extension\n  installed and yourself signed into https://web.vibodj.com, run\n  `vibo_capture_session` once — it grabs the token from your tab (approve the\n  pair code), saves it to `~/.vibo-mcp/session.json`, and reuses it thereafter.\n\nThe server boots without credentials (so it can be installed and probed); the\nconfig error only appears on the first tool call.\n\n## Tools\n\n### Reads\n- `vibo_get_me` — your profile (and whether Spotify/Apple Music are connected).\n- `vibo_list_events` — your upcoming (or `past:true`) events.\n- `vibo_get_event` — full details for one event.\n- `vibo_list_sections` — an event's timeline (Ceremony, First Dance, Dinner, …).\n- `vibo_get_section_songs` — songs requested in a section, with likes/flags/comments.\n- `vibo_list_section_questions` — the DJ's planning questions for a section (type, options, current answer).\n- `vibo_search_songs` — find songs to add (Vibo catalog or connected Spotify).\n- `vibo_list_section_song_ideas` / `vibo_list_song_ideas_songs` — browse the DJ's suggested song collections per section.\n- `vibo_get_playlists` / `vibo_get_playlist_songs` — your connected-service playlists.\n- `vibo_list_event_users` — the hosts and guests on an event.\n- `vibo_list_notifications` / `vibo_get_notifications_count`.\n- `vibo_healthcheck` — confirm connectivity + auth.\n\n### Writes (confirm-gated)\nEach mutating tool makes **no** network call unless `confirm: true`; without it\nyou get a dry-run preview of exactly what would be sent.\n\n- `vibo_add_song_to_section` — add a searched song to a section.\n- `vibo_remove_song_from_section` / `vibo_move_song` / `vibo_reorder_songs`.\n- `vibo_update_song` — mark must-play / do-not-play, or set a comment.\n- `vibo_toggle_song_like` — like/unlike a song.\n- `vibo_comment_on_song` / `vibo_comment_on_section` (+ delete) — leave the DJ notes.\n- `vibo_import_playlist_to_section` — pull tracks from a connected Spotify/Apple playlist.\n- `vibo_join_event` — join via a share link/hash (e.g. a `vibodj.app.link/...` URL).\n- `vibo_leave_event`.\n- `vibo_create_event_contact` — add a host/guest contact.\n- `vibo_invite_users` / `vibo_change_user_role` / `vibo_remove_user` — manage who's on the event.\n- `vibo_update_section` — edit a section's name, time, or note.\n- `vibo_answer_question` — answer a planning question (text / option ids / link / image+file uploads).\n- `vibo_set_profile_photo` — set your profile photo from a local image in the upload directory (`VIBO_UPLOAD_DIR`, default `~/Downloads/vibo-mcp`).\n- `vibo_capture_session` — capture your login from a signed-in browser tab (SSO accounts).\n- `vibo_mark_notifications_read`.\n- `vibo_export_event_to_spotify` / `vibo_export_event_to_apple_music`.\n\n## Response shape (`view`)\n\n**Six of this server's 39 tools take `view: \"compact\" | \"full\"`**, and on every\none of them **`compact` is the DEFAULT**. You get the slim rung without asking.\n\nThey are exactly the six reads whose GraphQL document asks Vibo for media:\n\n| Tool | What compact drops |\n| --- | --- |\n| `vibo_search_songs` | `thumbnails { s180x180 original }` per track |\n| `vibo_get_section_songs` | `thumbnails { s180x180 original }` per song |\n| `vibo_list_song_ideas_songs` | `thumbnails { s180x180 original }` per song |\n| `vibo_list_event_users` | `imageUrl` per person (both exits — merged and filtered) |\n| `vibo_list_notifications` | `imageUrl` per notification |\n| `vibo_get_me` | `imageUrl` |\n\nThat correspondence is not a coincidence to be maintained by hand: a test in\n`tests/view.test.ts` counts the media selections in `src/gql.ts` and asserts\nthe roster of `view`-taking tools matches. Add a seventh selection and it fails.\n\n**Compact here is media stripping, not a field projection.** `src/view.ts`\nwrites no field list, because this repo holds no captured Vibo payload to\nderive one from honestly; instead it removes keys whose value is a picture,\nwhich is subtractive and so cannot drop a field nobody knew about.\n\nWhat compact does **not** touch is the point of these tools: `songUrl`, the\n`links` block (`spotify` / `youtube` / `appleMusic`) and the `quality` verdict\nall survive. A streaming link is this server's product, not decoration —\n`vibo_add_song_to_section` cannot add anything without `songUrl`, and the\nquality verdict is computed from how many services carry a track. A `null` link\nsurvives too: an absent key and a null one are the same to `JSON.parse` but not\nto a reader deciding whether a service was checked.\n\n`view: \"full\"` returns Vibo's payload untouched, cover art included. There is\ndeliberately **no `raw` rung**: nothing here re-serialises or normalises the\nGraphQL response, so `full` already IS the upstream payload and a third value\nwould silently alias one that exists.\n\n### The other 33 tools have no `view`\n\n- **The 24 mutating tools** (every confirm-gated write, plus\n  `vibo_capture_session`) answer with a dry-run preview or a receipt — an id,\n  a count, a status. Nothing in a receipt is decoration, and slimming one is\n  how you lose the field that says what actually happened.\n- **`vibo_healthcheck`** answers with a connectivity/auth diagnostic. It runs\n  the same `GET_ME` document as `vibo_get_me` and still takes no rung, because\n  it never returns Vibo's user object — it builds `{ok, userId, email}` here.\n  A `view` on it would be a parameter that changes nothing.\n- **The 8 remaining reads hand back Vibo's GraphQL payload as it arrived**, and\n  their documents select no media, so there is nothing for a rung to remove.\n\nA `view` passed to a tool that does not declare one is dropped by zod without a\nwarning, so a successful call is never evidence the rung was honoured. Check\nthe table above rather than assuming.\n\n## Typical flow\n\n1. `vibo_list_events` → pick an event id.\n2. `vibo_list_sections` → pick a section id.\n3. `vibo_search_songs` → get a song's `songUrl`/`viboSongId`.\n4. `vibo_add_song_to_section` (with `confirm: true`).\n\nFile v2.2.3:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"vibo-mcp\",\n  \"version\": \"2.2.3\",\n  \"publishedAt\": 1790199638608\n}\n\nFile v2.2.3:skill-card.md\n\n## Description:\n\nAccesses Vibo event music planning through an MCP server so agents can help with events, timelines, song requests, playlists, do-not-play lists, event joining, and Spotify or Apple Music exports.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and event hosts use this skill to let an agent inspect and update Vibo event music plans, including timelines, song requests, guest contributions, playlists, and music-service exports.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Vibo credentials, captured browser session tokens, or local session files may be exposed if MCP configuration files, backups, source control, or shared machines are not handled carefully.\n\nMitigation: Use project-scoped MCP configuration when possible, keep credential and session files out of source control and backups, restrict local file permissions, and revoke or rotate Vibo credentials or tokens if the machine or configuration is shared.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/vibo-mcp)\n- [Vibo](https://vibodj.com)\n- [vibo-mcp npm package](https://www.npmjs.com/package/vibo-mcp)\n- [Source repository listed by the skill](https://github.com/chrischall/vibo-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown with inline JSON and shell command examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Agent output may include setup guidance, MCP configuration snippets, dry-run previews for confirm-gated writes, and summaries of Vibo account or event data.]\n\n## Skill Version(s):\n\n2.2.3 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.2.2: 3 files, 4978 bytes\n\nFiles: skill-card.md (2228b), SKILL.md (7618b), _meta.json (127b)\n\nFile v2.2.2:SKILL.md\n\n---\nname: vibo-mcp\ndescription: Access your Vibo (vibodj.com) event music planning via MCP. Use when the user asks about their Vibo events, wedding/event timeline, song requests, playlists, or \"do not play\" list, or wants to add or like songs, join an event from a share link, or export songs to Spotify/Apple Music. Triggers on phrases like \"what's on my Vibo timeline\", \"add this song to the first dance\", \"what songs did guests request\", \"join this Vibo event\", or \"export our playlist to Spotify\". Requires vibo-mcp installed and the vibo server registered (see Setup below).\n---\n\n# vibo-mcp\n\nMCP server for [Vibo](https://vibodj.com) — plan your event music as a host/couple: events, timeline sections, song requests, playlists, and exports, via natural language.\n\n- **npm:** [npmjs.com/package/vibo-mcp](https://www.npmjs.com/package/vibo-mcp)\n- **Source:** [github.com/chrischall/vibo-mcp](https://github.com/chrischall/vibo-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"vibo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"vibo-mcp\"],\n      \"env\": {\n        \"VIBO_EMAIL\": \"you@example.com\",\n        \"VIBO_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}\n```\n\n### Authentication\n\nPick one:\n\n- **Email + password (recommended):** set `VIBO_EMAIL` and `VIBO_PASSWORD`. The\n  server signs in server-side and manages the token (refreshing as needed).\n- **Captured token (for Apple/Google/Facebook accounts):** set\n  `VIBO_ACCESS_TOKEN` (and `VIBO_REFRESH_TOKEN`) with values captured from a\n  signed-in `web.vibodj.com` session — no password needed.\n- **Browser capture (SSO, automatic):** with the fetchproxy browser extension\n  installed and yourself signed into https://web.vibodj.com, run\n  `vibo_capture_session` once — it grabs the token from your tab (approve the\n  pair code), saves it to `~/.vibo-mcp/session.json`, and reuses it thereafter.\n\nThe server boots without credentials (so it can be installed and probed); the\nconfig error only appears on the first tool call.\n\n## Tools\n\n### Reads\n- `vibo_get_me` — your profile (and whether Spotify/Apple Music are connected).\n- `vibo_list_events` — your upcoming (or `past:true`) events.\n- `vibo_get_event` — full details for one event.\n- `vibo_list_sections` — an event's timeline (Ceremony, First Dance, Dinner, …).\n- `vibo_get_section_songs` — songs requested in a section, with likes/flags/comments.\n- `vibo_list_section_questions` — the DJ's planning questions for a section (type, options, current answer).\n- `vibo_search_songs` — find songs to add (Vibo catalog or connected Spotify).\n- `vibo_list_section_song_ideas` / `vibo_list_song_ideas_songs` — browse the DJ's suggested song collections per section.\n- `vibo_get_playlists` / `vibo_get_playlist_songs` — your connected-service playlists.\n- `vibo_list_event_users` — the hosts and guests on an event.\n- `vibo_list_notifications` / `vibo_get_notifications_count`.\n- `vibo_healthcheck` — confirm connectivity + auth.\n\n### Writes (confirm-gated)\nEach mutating tool makes **no** network call unless `confirm: true`; without it\nyou get a dry-run preview of exactly what would be sent.\n\n- `vibo_add_song_to_section` — add a searched song to a section.\n- `vibo_remove_song_from_section` / `vibo_move_song` / `vibo_reorder_songs`.\n- `vibo_update_song` — mark must-play / do-not-play, or set a comment.\n- `vibo_toggle_song_like` — like/unlike a song.\n- `vibo_comment_on_song` / `vibo_comment_on_section` (+ delete) — leave the DJ notes.\n- `vibo_import_playlist_to_section` — pull tracks from a connected Spotify/Apple playlist.\n- `vibo_join_event` — join via a share link/hash (e.g. a `vibodj.app.link/...` URL).\n- `vibo_leave_event`.\n- `vibo_create_event_contact` — add a host/guest contact.\n- `vibo_invite_users` / `vibo_change_user_role` / `vibo_remove_user` — manage who's on the event.\n- `vibo_update_section` — edit a section's name, time, or note.\n- `vibo_answer_question` — answer a planning question (text / option ids / link / image+file uploads).\n- `vibo_set_profile_photo` — set your profile photo from a local image.\n- `vibo_capture_session` — capture your login from a signed-in browser tab (SSO accounts).\n- `vibo_mark_notifications_read`.\n- `vibo_export_event_to_spotify` / `vibo_export_event_to_apple_music`.\n\n## Response shape (`view`)\n\n**Six of this server's 39 tools take `view: \"compact\" | \"full\"`**, and on every\none of them **`compact` is the DEFAULT**. You get the slim rung without asking.\n\nThey are exactly the six reads whose GraphQL document asks Vibo for media:\n\n| Tool | What compact drops |\n| --- | --- |\n| `vibo_search_songs` | `thumbnails { s180x180 original }` per track |\n| `vibo_get_section_songs` | `thumbnails { s180x180 original }` per song |\n| `vibo_list_song_ideas_songs` | `thumbnails { s180x180 original }` per song |\n| `vibo_list_event_users` | `imageUrl` per person (both exits — merged and filtered) |\n| `vibo_list_notifications` | `imageUrl` per notification |\n| `vibo_get_me` | `imageUrl` |\n\nThat correspondence is not a coincidence to be maintained by hand: a test in\n`tests/view.test.ts` counts the media selections in `src/gql.ts` and asserts\nthe roster of `view`-taking tools matches. Add a seventh selection and it fails.\n\n**Compact here is media stripping, not a field projection.** `src/view.ts`\nwrites no field list, because this repo holds no captured Vibo payload to\nderive one from honestly; instead it removes keys whose value is a picture,\nwhich is subtractive and so cannot drop a field nobody knew about.\n\nWhat compact does **not** touch is the point of these tools: `songUrl`, the\n`links` block (`spotify` / `youtube` / `appleMusic`) and the `quality` verdict\nall survive. A streaming link is this server's product, not decoration —\n`vibo_add_song_to_section` cannot add anything without `songUrl`, and the\nquality verdict is computed from how many services carry a track. A `null` link\nsurvives too: an absent key and a null one are the same to `JSON.parse` but not\nto a reader deciding whether a service was checked.\n\n`view: \"full\"` returns Vibo's payload untouched, cover art included. There is\ndeliberately **no `raw` rung**: nothing here re-serialises or normalises the\nGraphQL response, so `full` already IS the upstream payload and a third value\nwould silently alias one that exists.\n\n### The other 33 tools have no `view`\n\n- **The 24 mutating tools** (every confirm-gated write, plus\n  `vibo_capture_session`) answer with a dry-run preview or a receipt — an id,\n  a count, a status. Nothing in a receipt is decoration, and slimming one is\n  how you lose the field that says what actually happened.\n- **`vibo_healthcheck`** answers with a connectivity/auth diagnostic. It runs\n  the same `GET_ME` document as `vibo_get_me` and still takes no rung, because\n  it never returns Vibo's user object — it builds `{ok, userId, email}` here.\n  A `view` on it would be a parameter that changes nothing.\n- **The 8 remaining reads hand back Vibo's GraphQL payload as it arrived**, and\n  their documents select no media, so there is nothing for a rung to remove.\n\nA `view` passed to a tool that does not declare one is dropped by zod without a\nwarning, so a successful call is never evidence the rung was honoured. Check\nthe table above rather than assuming.\n\n## Typical flow\n\n1. `vibo_list_events` → pick an event id.\n2. `vibo_list_sections` → pick a section id.\n3. `vibo_search_songs` → get a song's `songUrl`/`viboSongId`.\n4. `vibo_add_song_to_section` (with `confirm: true`).\n\nFile v2.2.2:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"vibo-mcp\",\n  \"version\": \"2.2.2\",\n  \"publishedAt\": 1790178107605\n}\n\nFile v2.2.2:skill-card.md\n\n## Description:\n\nvibo-mcp lets agents access Vibo event music planning through MCP to read events, timelines, song requests, playlists, and exports, and to perform confirm-gated updates.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users, event hosts, couples, and developers use this skill to manage Vibo event music planning from an agent. It supports reviewing event timelines and song requests, adding or editing songs and guests, joining events from share links, and exporting playlists to Spotify or Apple Music.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Vibo credentials or captured session tokens could be exposed through shared MCP configuration, local session files, or repositories.\n\nMitigation: Keep Vibo credentials and captured tokens out of shared repositories, and restrict access to MCP config and ~/.vibo-mcp/session.json.\n\nRisk: Confirmed write actions can change event songs, guests, roles, profile data, or playlist exports.\n\nMitigation: Review dry-run previews before setting confirm:true for mutating tools.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/vibo-mcp)\n- [Vibo](https://vibodj.com)\n- [vibo-mcp npm package](https://www.npmjs.com/package/vibo-mcp)\n- [Repository linked by artifact](https://github.com/chrischall/vibo-mcp)\n- [Vibo web app](https://web.vibodj.com)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Code, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown with JSON configuration snippets and MCP tool-call guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Selected read tools can return compact or full views; mutating actions provide dry-run previews unless confirm:true is set.]\n\n## Skill Version(s):\n\n2.2.2 (source: server release metadata and changelog)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.2.1: 3 files, 4948 bytes\n\nFiles: skill-card.md (2044b), SKILL.md (7618b), _meta.json (127b)\n\nFile v2.2.1:SKILL.md\n\n---\nname: vibo-mcp\ndescription: Access your Vibo (vibodj.com) event music planning via MCP. Use when the user asks about their Vibo events, wedding/event timeline, song requests, playlists, or \"do not play\" list, or wants to add or like songs, join an event from a share link, or export songs to Spotify/Apple Music. Triggers on phrases like \"what's on my Vibo timeline\", \"add this song to the first dance\", \"what songs did guests request\", \"join this Vibo event\", or \"export our playlist to Spotify\". Requires vibo-mcp installed and the vibo server registered (see Setup below).\n---\n\n# vibo-mcp\n\nMCP server for [Vibo](https://vibodj.com) — plan your event music as a host/couple: events, timeline sections, song requests, playlists, and exports, via natural language.\n\n- **npm:** [npmjs.com/package/vibo-mcp](https://www.npmjs.com/package/vibo-mcp)\n- **Source:** [github.com/chrischall/vibo-mcp](https://github.com/chrischall/vibo-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"vibo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"vibo-mcp\"],\n      \"env\": {\n        \"VIBO_EMAIL\": \"you@example.com\",\n        \"VIBO_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}\n```\n\n### Authentication\n\nPick one:\n\n- **Email + password (recommended):** set `VIBO_EMAIL` and `VIBO_PASSWORD`. The\n  server signs in server-side and manages the token (refreshing as needed).\n- **Captured token (for Apple/Google/Facebook accounts):** set\n  `VIBO_ACCESS_TOKEN` (and `VIBO_REFRESH_TOKEN`) with values captured from a\n  signed-in `web.vibodj.com` session — no password needed.\n- **Browser capture (SSO, automatic):** with the fetchproxy browser extension\n  installed and yourself signed into https://web.vibodj.com, run\n  `vibo_capture_session` once — it grabs the token from your tab (approve the\n  pair code), saves it to `~/.vibo-mcp/session.json`, and reuses it thereafter.\n\nThe server boots without credentials (so it can be installed and probed); the\nconfig error only appears on the first tool call.\n\n## Tools\n\n### Reads\n- `vibo_get_me` — your profile (and whether Spotify/Apple Music are connected).\n- `vibo_list_events` — your upcoming (or `past:true`) events.\n- `vibo_get_event` — full details for one event.\n- `vibo_list_sections` — an event's timeline (Ceremony, First Dance, Dinner, …).\n- `vibo_get_section_songs` — songs requested in a section, with likes/flags/comments.\n- `vibo_list_section_questions` — the DJ's planning questions for a section (type, options, current answer).\n- `vibo_search_songs` — find songs to add (Vibo catalog or connected Spotify).\n- `vibo_list_section_song_ideas` / `vibo_list_song_ideas_songs` — browse the DJ's suggested song collections per section.\n- `vibo_get_playlists` / `vibo_get_playlist_songs` — your connected-service playlists.\n- `vibo_list_event_users` — the hosts and guests on an event.\n- `vibo_list_notifications` / `vibo_get_notifications_count`.\n- `vibo_healthcheck` — confirm connectivity + auth.\n\n### Writes (confirm-gated)\nEach mutating tool makes **no** network call unless `confirm: true`; without it\nyou get a dry-run preview of exactly what would be sent.\n\n- `vibo_add_song_to_section` — add a searched song to a section.\n- `vibo_remove_song_from_section` / `vibo_move_song` / `vibo_reorder_songs`.\n- `vibo_update_song` — mark must-play / do-not-play, or set a comment.\n- `vibo_toggle_song_like` — like/unlike a song.\n- `vibo_comment_on_song` / `vibo_comment_on_section` (+ delete) — leave the DJ notes.\n- `vibo_import_playlist_to_section` — pull tracks from a connected Spotify/Apple playlist.\n- `vibo_join_event` — join via a share link/hash (e.g. a `vibodj.app.link/...` URL).\n- `vibo_leave_event`.\n- `vibo_create_event_contact` — add a host/guest contact.\n- `vibo_invite_users` / `vibo_change_user_role` / `vibo_remove_user` — manage who's on the event.\n- `vibo_update_section` — edit a section's name, time, or note.\n- `vibo_answer_question` — answer a planning question (text / option ids / link / image+file uploads).\n- `vibo_set_profile_photo` — set your profile photo from a local image.\n- `vibo_capture_session` — capture your login from a signed-in browser tab (SSO accounts).\n- `vibo_mark_notifications_read`.\n- `vibo_export_event_to_spotify` / `vibo_export_event_to_apple_music`.\n\n## Response shape (`view`)\n\n**Six of this server's 39 tools take `view: \"compact\" | \"full\"`**, and on every\none of them **`compact` is the DEFAULT**. You get the slim rung without asking.\n\nThey are exactly the six reads whose GraphQL document asks Vibo for media:\n\n| Tool | What compact drops |\n| --- | --- |\n| `vibo_search_songs` | `thumbnails { s180x180 original }` per track |\n| `vibo_get_section_songs` | `thumbnails { s180x180 original }` per song |\n| `vibo_list_song_ideas_songs` | `thumbnails { s180x180 original }` per song |\n| `vibo_list_event_users` | `imageUrl` per person (both exits — merged and filtered) |\n| `vibo_list_notifications` | `imageUrl` per notification |\n| `vibo_get_me` | `imageUrl` |\n\nThat correspondence is not a coincidence to be maintained by hand: a test in\n`tests/view.test.ts` counts the media selections in `src/gql.ts` and asserts\nthe roster of `view`-taking tools matches. Add a seventh selection and it fails.\n\n**Compact here is media stripping, not a field projection.** `src/view.ts`\nwrites no field list, because this repo holds no captured Vibo payload to\nderive one from honestly; instead it removes keys whose value is a picture,\nwhich is subtractive and so cannot drop a field nobody knew about.\n\nWhat compact does **not** touch is the point of these tools: `songUrl`, the\n`links` block (`spotify` / `youtube` / `appleMusic`) and the `quality` verdict\nall survive. A streaming link is this server's product, not decoration —\n`vibo_add_song_to_section` cannot add anything without `songUrl`, and the\nquality verdict is computed from how many services carry a track. A `null` link\nsurvives too: an absent key and a null one are the same to `JSON.parse` but not\nto a reader deciding whether a service was checked.\n\n`view: \"full\"` returns Vibo's payload untouched, cover art included. There is\ndeliberately **no `raw` rung**: nothing here re-serialises or normalises the\nGraphQL response, so `full` already IS the upstream payload and a third value\nwould silently alias one that exists.\n\n### The other 33 tools have no `view`\n\n- **The 24 mutating tools** (every confirm-gated write, plus\n  `vibo_capture_session`) answer with a dry-run preview or a receipt — an id,\n  a count, a status. Nothing in a receipt is decoration, and slimming one is\n  how you lose the field that says what actually happened.\n- **`vibo_healthcheck`** answers with a connectivity/auth diagnostic. It runs\n  the same `GET_ME` document as `vibo_get_me` and still takes no rung, because\n  it never returns Vibo's user object — it builds `{ok, userId, email}` here.\n  A `view` on it would be a parameter that changes nothing.\n- **The 8 remaining reads hand back Vibo's GraphQL payload as it arrived**, and\n  their documents select no media, so there is nothing for a rung to remove.\n\nA `view` passed to a tool that does not declare one is dropped by zod without a\nwarning, so a successful call is never evidence the rung was honoured. Check\nthe table above rather than assuming.\n\n## Typical flow\n\n1. `vibo_list_events` → pick an event id.\n2. `vibo_list_sections` → pick a section id.\n3. `vibo_search_songs` → get a song's `songUrl`/`viboSongId`.\n4. `vibo_add_song_to_section` (with `confirm: true`).\n\nFile v2.2.1:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"vibo-mcp\",\n  \"version\": \"2.2.1\",\n  \"publishedAt\": 1789963988607\n}\n\nFile v2.2.1:skill-card.md\n\n## Description:\n\nAccess your Vibo (vibodj.com) event music planning via MCP.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and event hosts use this skill to manage Vibo event music planning through an MCP server, including timelines, song requests, playlists, guest participation, and exports to connected music services.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The MCP server can access Vibo account, event, and connected music-service data.\n\nMitigation: Install only when that account-level access is acceptable, and review requested operations before enabling confirm-gated writes.\n\nRisk: VIBO_PASSWORD, VIBO_ACCESS_TOKEN, VIBO_REFRESH_TOKEN, and ~/.vibo-mcp/session.json may expose sensitive credentials or sessions if leaked.\n\nMitigation: Treat these values like passwords, restrict local file access, and rotate or revoke credentials if configuration or session files are exposed.\n\n## Reference(s):\n\n- [Vibo](https://vibodj.com)\n- [vibo-mcp npm package](https://www.npmjs.com/package/vibo-mcp)\n- [vibo-mcp source repository](https://github.com/chrischall/vibo-mcp)\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/vibo-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Configuration, Shell commands, API Calls, Markdown]\n\n**Output Format:** [Markdown guidance with JSON configuration snippets and MCP tool call results]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Some read tools support compact or full views; mutating tools require explicit confirm gating before network changes.]\n\n## Skill Version(s):\n\n2.2.1 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.2.0: 3 files, 4910 bytes\n\nFiles: skill-card.md (1998b), SKILL.md (7618b), _meta.json (127b)\n\nFile v2.2.0:SKILL.md\n\n---\nname: vibo-mcp\ndescription: Access your Vibo (vibodj.com) event music planning via MCP. Use when the user asks about their Vibo events, wedding/event timeline, song requests, playlists, or \"do not play\" list, or wants to add or like songs, join an event from a share link, or export songs to Spotify/Apple Music. Triggers on phrases like \"what's on my Vibo timeline\", \"add this song to the first dance\", \"what songs did guests request\", \"join this Vibo event\", or \"export our playlist to Spotify\". Requires vibo-mcp installed and the vibo server registered (see Setup below).\n---\n\n# vibo-mcp\n\nMCP server for [Vibo](https://vibodj.com) — plan your event music as a host/couple: events, timeline sections, song requests, playlists, and exports, via natural language.\n\n- **npm:** [npmjs.com/package/vibo-mcp](https://www.npmjs.com/package/vibo-mcp)\n- **Source:** [github.com/chrischall/vibo-mcp](https://github.com/chrischall/vibo-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"vibo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"vibo-mcp\"],\n      \"env\": {\n        \"VIBO_EMAIL\": \"you@example.com\",\n        \"VIBO_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}\n```\n\n### Authentication\n\nPick one:\n\n- **Email + password (recommended):** set `VIBO_EMAIL` and `VIBO_PASSWORD`. The\n  server signs in server-side and manages the token (refreshing as needed).\n- **Captured token (for Apple/Google/Facebook accounts):** set\n  `VIBO_ACCESS_TOKEN` (and `VIBO_REFRESH_TOKEN`) with values captured from a\n  signed-in `web.vibodj.com` session — no password needed.\n- **Browser capture (SSO, automatic):** with the fetchproxy browser extension\n  installed and yourself signed into https://web.vibodj.com, run\n  `vibo_capture_session` once — it grabs the token from your tab (approve the\n  pair code), saves it to `~/.vibo-mcp/session.json`, and reuses it thereafter.\n\nThe server boots without credentials (so it can be installed and probed); the\nconfig error only appears on the first tool call.\n\n## Tools\n\n### Reads\n- `vibo_get_me` — your profile (and whether Spotify/Apple Music are connected).\n- `vibo_list_events` — your upcoming (or `past:true`) events.\n- `vibo_get_event` — full details for one event.\n- `vibo_list_sections` — an event's timeline (Ceremony, First Dance, Dinner, …).\n- `vibo_get_section_songs` — songs requested in a section, with likes/flags/comments.\n- `vibo_list_section_questions` — the DJ's planning questions for a section (type, options, current answer).\n- `vibo_search_songs` — find songs to add (Vibo catalog or connected Spotify).\n- `vibo_list_section_song_ideas` / `vibo_list_song_ideas_songs` — browse the DJ's suggested song collections per section.\n- `vibo_get_playlists` / `vibo_get_playlist_songs` — your connected-service playlists.\n- `vibo_list_event_users` — the hosts and guests on an event.\n- `vibo_list_notifications` / `vibo_get_notifications_count`.\n- `vibo_healthcheck` — confirm connectivity + auth.\n\n### Writes (confirm-gated)\nEach mutating tool makes **no** network call unless `confirm: true`; without it\nyou get a dry-run preview of exactly what would be sent.\n\n- `vibo_add_song_to_section` — add a searched song to a section.\n- `vibo_remove_song_from_section` / `vibo_move_song` / `vibo_reorder_songs`.\n- `vibo_update_song` — mark must-play / do-not-play, or set a comment.\n- `vibo_toggle_song_like` — like/unlike a song.\n- `vibo_comment_on_song` / `vibo_comment_on_section` (+ delete) — leave the DJ notes.\n- `vibo_import_playlist_to_section` — pull tracks from a connected Spotify/Apple playlist.\n- `vibo_join_event` — join via a share link/hash (e.g. a `vibodj.app.link/...` URL).\n- `vibo_leave_event`.\n- `vibo_create_event_contact` — add a host/guest contact.\n- `vibo_invite_users` / `vibo_change_user_role` / `vibo_remove_user` — manage who's on the event.\n- `vibo_update_section` — edit a section's name, time, or note.\n- `vibo_answer_question` — answer a planning question (text / option ids / link / image+file uploads).\n- `vibo_set_profile_photo` — set your profile photo from a local image.\n- `vibo_capture_session` — capture your login from a signed-in browser tab (SSO accounts).\n- `vibo_mark_notifications_read`.\n- `vibo_export_event_to_spotify` / `vibo_export_event_to_apple_music`.\n\n## Response shape (`view`)\n\n**Six of this server's 39 tools take `view: \"compact\" | \"full\"`**, and on every\none of them **`compact` is the DEFAULT**. You get the slim rung without asking.\n\nThey are exactly the six reads whose GraphQL document asks Vibo for media:\n\n| Tool | What compact drops |\n| --- | --- |\n| `vibo_search_songs` | `thumbnails { s180x180 original }` per track |\n| `vibo_get_section_songs` | `thumbnails { s180x180 original }` per song |\n| `vibo_list_song_ideas_songs` | `thumbnails { s180x180 original }` per song |\n| `vibo_list_event_users` | `imageUrl` per person (both exits — merged and filtered) |\n| `vibo_list_notifications` | `imageUrl` per notification |\n| `vibo_get_me` | `imageUrl` |\n\nThat correspondence is not a coincidence to be maintained by hand: a test in\n`tests/view.test.ts` counts the media selections in `src/gql.ts` and asserts\nthe roster of `view`-taking tools matches. Add a seventh selection and it fails.\n\n**Compact here is media stripping, not a field projection.** `src/view.ts`\nwrites no field list, because this repo holds no captured Vibo payload to\nderive one from honestly; instead it removes keys whose value is a picture,\nwhich is subtractive and so cannot drop a field nobody knew about.\n\nWhat compact does **not** touch is the point of these tools: `songUrl`, the\n`links` block (`spotify` / `youtube` / `appleMusic`) and the `quality` verdict\nall survive. A streaming link is this server's product, not decoration —\n`vibo_add_song_to_section` cannot add anything without `songUrl`, and the\nquality verdict is computed from how many services carry a track. A `null` link\nsurvives too: an absent key and a null one are the same to `JSON.parse` but not\nto a reader deciding whether a service was checked.\n\n`view: \"full\"` returns Vibo's payload untouched, cover art included. There is\ndeliberately **no `raw` rung**: nothing here re-serialises or normalises the\nGraphQL response, so `full` already IS the upstream payload and a third value\nwould silently alias one that exists.\n\n### The other 33 tools have no `view`\n\n- **The 24 mutating tools** (every confirm-gated write, plus\n  `vibo_capture_session`) answer with a dry-run preview or a receipt — an id,\n  a count, a status. Nothing in a receipt is decoration, and slimming one is\n  how you lose the field that says what actually happened.\n- **`vibo_healthcheck`** answers with a connectivity/auth diagnostic. It runs\n  the same `GET_ME` document as `vibo_get_me` and still takes no rung, because\n  it never returns Vibo's user object — it builds `{ok, userId, email}` here.\n  A `view` on it would be a parameter that changes nothing.\n- **The 8 remaining reads hand back Vibo's GraphQL payload as it arrived**, and\n  their documents select no media, so there is nothing for a rung to remove.\n\nA `view` passed to a tool that does not declare one is dropped by zod without a\nwarning, so a successful call is never evidence the rung was honoured. Check\nthe table above rather than assuming.\n\n## Typical flow\n\n1. `vibo_list_events` → pick an event id.\n2. `vibo_list_sections` → pick a section id.\n3. `vibo_search_songs` → get a song's `songUrl`/`viboSongId`.\n4. `vibo_add_song_to_section` (with `confirm: true`).\n\nFile v2.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"vibo-mcp\",\n  \"version\": \"2.2.0\",\n  \"publishedAt\": 1789929048864\n}\n\nFile v2.2.0:skill-card.md\n\n## Description:\n\nAccess your Vibo event music planning via MCP.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and event hosts use this skill to let an agent inspect and update Vibo event music planning data, including timelines, song requests, playlists, guest contacts, comments, and exports.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill configures an MCP server with access to Vibo account credentials, event details, guest/contact data, playlists, and mutating event actions.\n\nMitigation: Use user-level secret handling, avoid committing credentials or session files, restrict file permissions, and review dry-run previews before setting confirm:true.\n\nRisk: Local password or session-token storage can expose Vibo access if project configuration, ~/.vibo-mcp/session.json, backups, or logs are shared.\n\nMitigation: Keep VIBO_PASSWORD, VIBO_ACCESS_TOKEN, VIBO_REFRESH_TOKEN, and ~/.vibo-mcp/session.json out of version control and backups.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/vibo-mcp)\n- [Vibo](https://vibodj.com)\n- [vibo-mcp npm package](https://www.npmjs.com/package/vibo-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, configuration, shell commands, guidance]\n\n**Output Format:** [Markdown with JSON configuration snippets and inline shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May guide MCP tool calls that read Vibo account and event data or perform confirm-gated event updates.]\n\n## Skill Version(s):\n\n2.2.0 (source: release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.","readmeExcerpt":"Skill: vibo-mcp Owner: chrischall Summary: Access your Vibo (vibodj.com) event music planning via MCP. Use when the user asks about their Vibo events, wedding/event timeline, song requests, playlists, or \"do not play\" list, or wants to add or like songs, join an event from a share link, or export songs to Spotify/Apple Music. Triggers on phrases like \"what's on my Vibo timeline\", \"add this song to the first dance\", \"","codeSnippets":[],"executableExamples":[{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"vibo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"vibo-mcp\"],\n      \"env\": {\n        \"VIBO_EMAIL\": \"you@example.com\",\n        \"VIBO_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"vibo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"vibo-mcp\"],\n      \"env\": {\n        \"VIBO_EMAIL\": \"you@example.com\",\n        \"VIBO_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"vibo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"vibo-mcp\"],\n      \"env\": {\n        \"VIBO_EMAIL\": \"you@example.com\",\n        \"VIBO_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"vibo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"vibo-mcp\"],\n      \"env\": {\n        \"VIBO_EMAIL\": \"you@example.com\",\n        \"VIBO_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"vibo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"vibo-mcp\"],\n      \"env\": {\n        \"VIBO_EMAIL\": \"you@example.com\",\n        \"VIBO_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"vibo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"vibo-mcp\"],\n      \"env\": {\n        \"VIBO_EMAIL\": \"you@example.com\",\n        \"VIBO_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: vibo-mcp\ndescription: Access your Vibo (vibodj.com) event music planning via MCP. Use when the user asks about their Vibo events, wedding/event timeline, song requests, playlists, or \"do not play\" list, or wants to add or like songs, join an event from a share link, or export songs to Spotify/Apple Music. Triggers on phrases like \"what's on my Vibo timeline\", \"add this song to the first dance\", \"what songs did guests request\", \"join this Vibo event\", or \"export our playlist to Spotify\". Requires vibo-mcp installed and the vibo server registered (see Setup below).\n---\n\n# vibo-mcp\n\nMCP server for [Vibo](https://vibodj.com) — plan your event music as a host/couple: events, timeline sections, song requests, playlists, and exports, via natural language.\n\n- **npm:** [npmjs.com/package/vibo-mcp](https://www.npmjs.com/package/vibo-mcp)\n- **Source:** [github.com/chrischall/vibo-mcp](https://github.com/chrischall/vibo-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"vibo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"vibo-mcp\"],\n      \"env\": {\n        \"VIBO_EMAIL\": \"you@example.com\",\n        \"VIBO_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}\n```\n\n### Authentication\n\nPick one:\n\n- **Email + password (recommended):** set `VIBO_EMAIL` and `VIBO_PASSWORD`. The\n  server signs in server-side and manages the token (refreshing as needed).\n- **Captured token (for Apple/Google/Facebook accounts):** set\n  `VIBO_ACCESS_TOKEN` (and `VIBO_REFRESH_TOKEN`) with values captured from a\n  signed-in `web.vibodj.com` session — no password needed.\n- **Browser capture (SSO, automatic):** with the ContextMint Bridge browser extension\n  (https://github.com/nullnet-app/contextmint-bridge/releases — the fetchproxy\n  extension renamed, same maintainer, public source; Chrome only for now)\n  installed and yourself signed into https://web.vibodj.com, run\n  `vibo_capture_session` once — it grabs the token from your tab (approve the\n  pair code), saves it to `~/.vibo-mcp/session.json`, and reuses it thereafter.\n\nThe server boots without credentials (so it can be installed and probed); the\nconfig error only appears on the first tool call.\n\n## Tools\n\n### Reads\n- `vibo_get_me` — your profile (and whether Spotify/Apple Music are connected).\n- `vibo_list_events` — your upcoming (or `past:true`) events.\n- `vibo_get_event` — full details for one event.\n- `vibo_list_sections` — an event's timeline (Ceremony, First Dance, Dinner, …).\n- `vibo_get_section_songs` — songs requested in a section, with likes/flags/comments.\n- `vibo_list_section_questions` — the DJ's planning questions for a section (type, options, current answer).\n- `vibo_search_songs` — find songs to add (Vibo catalog or connected Spotify).\n- `vibo_list_section_song_ideas` / `vibo_list_song_ideas_songs` — browse the DJ's suggested song collections per section.\n- `vibo_get_playlists` / `vibo_get_playlist_songs` — your connected-s"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"vibo-mcp\",\n  \"version\": \"2.4.3\",\n  \"publishedAt\": 1791380567125\n}"},{"path":"skill-card.md","content":"## Description:\n\nAccess Vibo event timelines, song requests, playlists, and music exports through an MCP integration.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nVibo users and their assistants can review event plans and song requests, organize music and guests, and export event playlists through their Vibo account.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The installed package can access the user's Vibo account and its event data.\n\nMitigation: Install only if you trust the vibo-mcp package and review event changes before approving them.\n\nRisk: Passwords, access tokens, refresh tokens, and saved sessions can expose the Vibo account if shared.\n\nMitigation: Keep credentials and session files private; omit secrets from shared configuration, logs, screenshots, and support bundles.\n\n## Reference(s):\n\n- [Vibo](https://vibodj.com)\n- [vibo-mcp npm package](https://www.npmjs.com/package/vibo-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Configuration instructions, Shell commands]\n\n**Output Format:** [Markdown with JSON configuration examples and tool responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Event changes require user confirmation; some read tools offer compact or full responses.]\n\n## Skill Version(s):\n\n2.4.3 (source: server-resolved release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1381,"uniquenessScore":43,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T15:18:23.770Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T15:18:23.770Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T07:01:41.829Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}