# Video Highlight connector for Meta Muse

Machine brief for the Video Highlight remote MCP connector. Read this before building a client or a skill against it.

## Endpoint
- URL: https://mcp.videohighlight.com/mcp
- Transport: Streamable HTTP (Model Context Protocol)
- Access: read-only. Every tool is read-only. The server stores no user content, and cannot write to the account.

## Authentication
OAuth only. Standard MCP OAuth authorizes the client as one Video Highlight account. The server publishes RFC 9728 protected-resource metadata at /.well-known/oauth-protected-resource; discovery and sign-in follow the MCP spec. No password is shared with the client. Sign-in happens in the browser; never ask the user to paste a key or password into the conversation.

An OAuth grant carries the same read access as the account. Through this connector it reaches only the read-only tools below.

## Tools

| Tool | Arguments | Use when | Do not use when |
|---|---|---|---|
| search | q (alias query): string, required. limit: 1-50, default 20. video_id: optional, restricts the search to that one video; omit it to search the whole library | Finding a video by what was said, or by its title, before reading it. With video_id, finding what was said about a topic inside a video you already identified | Searching the public web. This searches only the caller's own library |
| list_videos | limit: 1-200, default 50. cursor: opaque, from a previous call | Browsing the library or discovering video ids; page with next_cursor | Concluding a video is unwatched from a missing "last watched" time. The list is ordered last opened first, not by watch time |
| get_video | id: string, exactly as returned by list_videos or search, required | You have an id and need title, source, duration, status, and whether a transcript and summary exist | You want the content itself. Use get_transcript or get_summary |
| get_transcript | id: string, exactly as returned by list_videos or search, required | You need exact wording, quotes, or timestamps | You expect it to transcribe a video that has none. It reads a saved transcript only |
| get_summary | id: string, exactly as returned by list_videos or search, required. language: optional code such as en, ro, pt-BR | You need an overview of a video that already has a saved summary | You expect it to generate a new summary. It reads an existing one only |
| get_highlights | id: string, exactly as returned by list_videos or search, required. language: optional code such as en or pt-BR, filters summary highlights only; transcript highlights are always returned | You need what the user marked as important in one video, or the notes they wrote on it. Returns highlights on the summary (with language) and on the transcript (with timestamp) | Finding which videos have highlights. It reads one video at a time. It never creates, edits or deletes a highlight |
| whoami | none | Confirming which account and workspace are connected | Not applicable |

Ids are opaque strings returned by list_videos or search. Use them exactly as returned. Do not construct them.

## Worked examples

1. "Which of my videos discusses X, and what exactly was said?"
   - search with q set to "X" to find the video and the matching moment. Results include a snippet and its [mm:ss] timestamp.
   - To look for more moments inside that one video, search again with video_id set to its id. Use get_transcript with that id for the surrounding wording.
   - Answer with the timestamps the tools returned. Do not invent one.

2. "Summarize the webinar I saved about pricing."
   - search with q set to "pricing webinar", or list_videos to browse, to resolve the video id.
   - get_summary with that id, adding language when the user wants a specific one.
   - Present the saved summary. Its first line names the language served; translate if it is not the user's.

3. "What did I highlight in that interview, and what did I note?"
   - search or list_videos to resolve the video id.
   - get_highlights with that id. Report each highlight with its timestamp and the user's note.
   - If a highlight says its original passage is no longer available, report the note and timestamp and never guess the missing text. "No highlights in this video yet." is a normal result.

4. "What did I last watch?"
   - list_videos, then compare the "last watched" times across entries. The list is not sorted by them.
   - get_summary or get_transcript on the chosen id if the user wants detail.
   - A missing "last watched" time does not mean never watched. Do not report a video as unwatched.

## What common errors mean

- 401 challenge, or "this connection is no longer authorized": the OAuth grant expired or was revoked. Reconnect with OAuth. Do not retry blindly.
- "no video with that id in your library": the video was removed, belongs to a different workspace, or the id was altered. Use an id exactly as returned by list_videos or search.
- "No matches for ... in that video": a normal result of a search limited by video_id, not an error. Try other wording, or search the whole library by omitting video_id.
- "this video has no saved summary": the connector only reads what already exists and cannot create one. Tell the user they can create it at videohighlight.com. get_transcript may still work for that video.
- "this video has no saved transcript": the connector cannot transcribe. Tell the user they can create it at videohighlight.com.
- "searching inside one video is not available right now": the video_id filter could not be applied. Search the whole library without video_id, or read the video with get_transcript. Do not present whole-library matches as if they came from that video.
- rate limited (429): wait a moment, then retry.
- API unreachable, or 503: transient. Retry shortly.
- "search: tell me what to look for": pass a non-empty search term as query (or q).
- An empty library is not an error. It is a normal state for a new connection.

## Never do

- Never invent a timestamp or a quote. Cite only what get_transcript or search returned.
- Never claim a video is unwatched because its "last watched" time is missing. Watch history is partial.
- Never ask the user to paste a key or password into the chat. Sign-in happens in the browser.
- Never claim the connector can generate a summary, transcribe, upload, create highlights or notes, edit playlists, export, delete, or change billing. It is read-only.
- Never treat search as a web search. It covers only the caller's own library.

## Links
- Human setup guide: https://videohighlight.com/connectors/muse
- Connectors hub: https://videohighlight.com/connectors
- Privacy policy: https://videohighlight.com/privacy-policy
- Support: support@videohighlight.com
