{"apiVersion":"v1","directorySlug":"irvinebroque-mcp-129f65af8f","title":"Brendan Irvine-Broque","description":"Brendan Irvine-Broque is a product leader at Cloudflare. Explore his writing, work history, and public collections of books, music, places, and more.","pageUrl":"https://www.mcpbundles.com/skills/irvinebroque-mcp-129f65af8f","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://irvinebroque.com/mcp","hostedMcpUrl":null,"toolCount":16,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"com.irvinebroque/irvinebroque-mcp-129f65af8f","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"radio.edition","description":"Read a verified shared Spotify playlist. Omit id for latest. Never creates a playlist or returns a personal queue.","inputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"additionalProperties":false},"title":"Read shared radio mix","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"radio.edition","displayName":"Read shared radio mix"},{"name":"taste.profile","description":"Use this when a client needs Brendan’s portable music taste profile for interoperability. Return the versioned, bounded public music profile and canonical links. This is not a general collection summary.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"title":"Get Brendan’s portable music taste profile","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"taste.profile","displayName":"Get Brendan’s portable music taste profile"},{"name":"music.intersect","description":"Compare a bounded, listener-confirmed version 1 music taste profile with Brendan’s public canonical tracks. Returns grounded canonical IDs, reason codes, unmatched counts, and no compatibility percentage.","inputSchema":{"type":"object","required":["profile"],"properties":{"limit":{"type":"integer","default":40,"maximum":100,"minimum":1},"profile":{"type":"object","required":["schemaVersion","music"],"properties":{"music":{"type":"object","required":["artists","recordings","albums","genres","notes"],"properties":{"notes":{"type":"array","items":{"type":"string","pattern":"^(?![\\s\\S]*(?:[\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f]|<\\/?[A-Za-z][^>]*>|```|(?:[Dd][Aa][Tt][Aa]|[Jj][Aa][Vv][Aa][Ss][Cc][Rr][Ii][Pp][Tt]|[Vv][Bb][Ss][Cc][Rr][Ii][Pp][Tt]):))[\\s\\S]+$","maxLength":240,"minLength":1},"maxItems":12},"albums":{"type":"array","items":{"type":"object","required":["title","artist"],"properties":{"artist":{"type":"string","pattern":"^(?![\\s\\S]*(?:[\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f]|<\\/?[A-Za-z][^>]*>|```|(?:[Dd][Aa][Tt][Aa]|[Jj][Aa][Vv][Aa][Ss][Cc][Rr][Ii][Pp][Tt]|[Vv][Bb][Ss][Cc][Rr][Ii][Pp][Tt]):))[\\s\\S]+$","maxLength":240,"minLength":1},"stance":{"enum":["love","like","curious","avoid"],"type":"string","default":"like"},"weight":{"type":"integer","maximum":100,"minimum":1},"externalIds":{"type":"object","properties":{"discogs-master":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"},"discogs-release":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"}},"additionalProperties":false}},"additionalProperties":false},"maxItems":40},"genres":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string","pattern":"^(?![\\s\\S]*(?:[\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f]|<\\/?[A-Za-z][^>]*>|```|(?:[Dd][Aa][Tt][Aa]|[Jj][Aa][Vv][Aa][Ss][Cc][Rr][Ii][Pp][Tt]|[Vv][Bb][Ss][Cc][Rr][Ii][Pp][Tt]):))[\\s\\S]+$","maxLength":100,"minLength":1},"stance":{"enum":["love","like","curious","avoid"],"type":"string","default":"like"},"weight":{"type":"integer","maximum":100,"minimum":1}},"additionalProperties":false},"maxItems":30},"artists":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string","pattern":"^(?![\\s\\S]*(?:[\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f]|<\\/?[A-Za-z][^>]*>|```|(?:[Dd][Aa][Tt][Aa]|[Jj][Aa][Vv][Aa][Ss][Cc][Rr][Ii][Pp][Tt]|[Vv][Bb][Ss][Cc][Rr][Ii][Pp][Tt]):))[\\s\\S]+$","maxLength":200,"minLength":1},"stance":{"enum":["love","like","curious","avoid"],"type":"string","default":"like"},"weight":{"type":"integer","maximum":100,"minimum":1},"externalIds":{"type":"object","properties":{"spotify-artist":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"}},"additionalProperties":false}},"additionalProperties":false},"maxItems":50},"recordings":{"type":"array","items":{"type":"object","required":["title","artist"],"properties":{"artist":{"type":"string","pattern":"^(?![\\s\\S]*(?:[\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f]|<\\/?[A-Za-z][^>]*>|```|(?:[Dd][Aa][Tt][Aa]|[Jj][Aa][Vv][Aa][Ss][Cc][Rr][Ii][Pp][Tt]|[Vv][Bb][Ss][Cc][Rr][Ii][Pp][Tt]):))[\\s\\S]+$","maxLength":240,"minLength":1},"stance":{"enum":["love","like","curious","avoid"],"type":"string","default":"like"},"weight":{"type":"integer","maximum":100,"minimum":1},"externalIds":{"type":"object","properties":{"isrc":{"type":"string","pattern":"^[A-Z]{2}[A-Z0-9]{3}\\d{7}$"},"spotify-track":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"}},"additionalProperties":false}},"additionalProperties":false},"maxItems":100}},"additionalProperties":false},"subject":{"type":"object","properties":{"displayName":{"type":"string","pattern":"^(?![\\s\\S]*(?:[\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f]|<\\/?[A-Za-z][^>]*>|```|(?:[Dd][Aa][Tt][Aa]|[Jj][Aa][Vv][Aa][Ss][Cc][Rr][Ii][Pp][Tt]|[Vv][Bb][Ss][Cc][Rr][Ii][Pp][Tt]):))[\\s\\S]+$","maxLength":160,"minLength":1},"canonicalUrl":{"type":"string","pattern":"^https:\\/\\/(?![^/]*@)[^#]+$","maxLength":2048}},"additionalProperties":false},"schemaVersion":{"const":"1"}},"additionalProperties":false}},"additionalProperties":false},"title":"Intersect a public music taste profile","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"music.intersect","displayName":"Intersect a public music taste profile"},{"name":"taste.summarize","description":"Use this when the user asks about Brendan’s overall movie taste, patterns, breadth, recurring genres, eras, creators, or collection composition. Summarize public movie and TV recommendations using complete-corpus counts, approved distributions, data coverage, and deterministic illustrative examples. Do not use to find one known item or choose a recommendation for a specific request. The result includes renderInput for optional illustrative rendering.","inputSchema":{"type":"object","required":["collection"],"properties":{"collection":{"const":"movies"},"exampleLimit":{"type":"integer","default":6,"maximum":8,"minimum":3}},"additionalProperties":false},"title":"Summarize Brendan’s public taste collection","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"taste.summarize","displayName":"Summarize Brendan’s public taste collection"},{"name":"taste.recommend","description":"Use this when the user wants items chosen for a stated need from Brendan’s public recommendations. Words such as recommend, pick, choose, watch tonight, or date night require this tool even when the constraints could identify one item. Rank by the supplied intent or constraints. Returned items already include authoritative canonical URLs. After a successful result, cite its canonicalUrl directly; never call taste.find or taste.get merely to verify it. Continue any remaining user-requested action","inputSchema":{"type":"object","required":["intent"],"properties":{"limit":{"type":"integer","default":5,"maximum":10,"minimum":1},"intent":{"type":"string","maxLength":240,"minLength":1},"category":{"type":"string","maxLength":120,"minLength":0},"retrieval":{"const":"semantic"},"collection":{"type":"string"}},"additionalProperties":false},"title":"Recommend from Brendan’s tastes","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"taste.recommend","displayName":"Recommend from Brendan’s tastes"},{"name":"taste.find","description":"Use this only when the user starts with one known title, name, URL, or identifying clue and is asking whether that item is in the corpus. Resolve it only within the stated public corpus. A request to recommend, pick, choose, watch tonight, or plan a date night uses taste.recommend instead, even if its constraints could identify one item. Never call this after taste.recommend or taste.summarize to verify an item they returned. Do not use it for an overall taste summary or to choose among recommen","inputSchema":{"type":"object","required":["query"],"properties":{"limit":{"type":"integer","default":5,"maximum":10,"minimum":1},"query":{"type":"string","maxLength":240,"minLength":1},"collection":{"type":"string"}},"additionalProperties":false},"title":"Find a known item","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"taste.find","displayName":"Find a known item"},{"name":"taste.get","description":"Use this only to fetch authoritative public details for opaque canonical item IDs returned by taste.find, taste.recommend, or taste.summarize.","inputSchema":{"type":"object","required":["canonicalIds"],"properties":{"canonicalIds":{"type":"array","items":{"type":"string","pattern":"^itm_[a-f0-9]{24}$"},"maxItems":20,"minItems":1}},"additionalProperties":false},"title":"Get canonical item details","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"taste.get","displayName":"Get canonical item details"},{"name":"feed.list","description":"Read a chronological page across Brendan’s public collections. mode upcoming selects future items soonest first; past selects earlier items newest first. Omit mode for the unpartitioned feed. Continue with the returned cursor and original filters; asOf freezes the boundary. Time membership does not imply attendance or completion. No UI is required.","inputSchema":{"type":"object","properties":{"q":{"type":"string","maxLength":240,"minLength":0},"to":{"type":"string","maxLength":10,"minLength":0},"asOf":{"type":"string","maxLength":24,"minLength":0},"from":{"type":"string","maxLength":10,"minLength":0},"kind":{"type":"string","maxLength":240,"minLength":0},"mode":{"enum":["upcoming","past"],"type":"string"},"sort":{"type":"string","maxLength":120,"minLength":0},"year":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},"limit":{"type":"integer","default":20,"maximum":100,"minimum":1},"cursor":{"type":"string","maxLength":2000,"minLength":1},"source":{"type":"string","maxLength":240,"minLength":0}},"additionalProperties":false},"title":"List upcoming or past feed items","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"feed.list","displayName":"List upcoming or past feed items"},{"name":"concerts.list","description":"List concerts Brendan attended or plans to attend, with optional artist, venue, city, year, and text filters. Returns canonical records with Spotify artist and Google Maps venue links when available.","inputSchema":{"type":"object","properties":{"q":{"type":"string","maxLength":240,"minLength":0},"city":{"type":"string","maxLength":120,"minLength":0},"year":{"type":"integer","maximum":2200,"minimum":1900},"limit":{"type":"integer","default":10,"maximum":20,"minimum":1},"venue":{"type":"string","maxLength":300,"minLength":0},"artist":{"type":"string","maxLength":300,"minLength":0}},"additionalProperties":false},"title":"List concerts","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"concerts.list","displayName":"List concerts"},{"name":"places.plan","description":"Choose and approximately order places from Brendan’s curated map. The tool does not request device location; include a named area only when the user supplied one. Ordering uses curated coordinates, not road routing or travel-time guidance.","inputSchema":{"type":"object","required":["request"],"properties":{"limit":{"type":"integer","default":5,"maximum":10,"minimum":1},"request":{"type":"string","maxLength":240,"minLength":1},"category":{"enum":["food","coffee","bars","nature","entertainment","lodging","other"],"type":"string"}},"additionalProperties":false},"title":"Plan with Brendan’s places","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"places.plan","displayName":"Plan with Brendan’s places"},{"name":"sports.list","description":"List sporting events Brendan attended in person or watched, plus events he plans to attend or watch. Filter by experience, status, team, sport, league, year, city, venue, or a general query. Results include canonical IDs for the sports.render_events scorecard view.","inputSchema":{"type":"object","properties":{"city":{"type":"string","maxLength":120,"minLength":0},"team":{"type":"string","maxLength":120,"minLength":0},"year":{"type":"integer","maximum":2200,"minimum":1800},"limit":{"type":"integer","default":10,"maximum":20,"minimum":1},"query":{"type":"string","maxLength":240,"minLength":0},"sport":{"type":"string","maxLength":80,"minLength":0},"venue":{"type":"string","maxLength":160,"minLength":0},"league":{"type":"string","maxLength":80,"minLength":0},"experience":{"enum":["in-person","watch"],"type":"string"},"experienceStatus":{"enum":["planned","completed"],"type":"string"}},"additionalProperties":false},"title":"List Brendan’s sporting events","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"sports.list","displayName":"List Brendan’s sporting events"},{"name":"taste.render_recommendations","description":"Render an ordered selection as a compact interactive list. First use a data tool, then copy its structuredContent.renderInput object verbatim as this tool’s arguments. Canonical IDs are opaque: never infer, shorten, or rewrite them.","inputSchema":{"type":"object","required":["canonicalIds"],"properties":{"canonicalIds":{"type":"array","items":{"type":"string","pattern":"^itm_[a-f0-9]{24}$"},"maxItems":20,"minItems":1}},"additionalProperties":false},"title":"Render selected recommendations","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"taste.render_recommendations","displayName":"Render selected recommendations"},{"name":"places.render_map","description":"Render an ordered place selection on a map. First use a data tool, then copy its structuredContent.renderInput object verbatim as this tool’s arguments. Canonical IDs are opaque: never infer, shorten, or rewrite them.","inputSchema":{"type":"object","required":["canonicalIds"],"properties":{"canonicalIds":{"type":"array","items":{"type":"string","pattern":"^itm_[a-f0-9]{24}$"},"maxItems":20,"minItems":1}},"additionalProperties":false},"title":"Render selected places on a map","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"places.render_map","displayName":"Render selected places on a map"},{"name":"sports.render_events","description":"Render completed and scheduled sporting events as scorecards. First call sports.list, then copy its structuredContent.renderInput object verbatim. Canonical IDs are opaque: never infer, shorten, or rewrite them.","inputSchema":{"type":"object","required":["canonicalIds"],"properties":{"canonicalIds":{"type":"array","items":{"type":"string","pattern":"^itm_[a-f0-9]{24}$"},"maxItems":20,"minItems":1}},"additionalProperties":false},"title":"Render sporting events","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"sports.render_events","displayName":"Render sporting events"},{"name":"taste.get_detail","description":"App-only detail lookup for a canonical item selected in Taste Explorer.","inputSchema":{"type":"object","required":["canonicalIds"],"properties":{"canonicalIds":{"type":"array","items":{"type":"string","pattern":"^itm_[a-f0-9]{24}$"},"maxItems":5,"minItems":1}},"additionalProperties":false},"title":"Get selected item detail","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"taste.get_detail","displayName":"Get selected item detail"},{"name":"places.refine_view","description":"App-only place lookup by a user-authored search and optional category. It does not request device location or map viewport coordinates.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","default":20,"maximum":20,"minimum":1},"query":{"type":"string","maxLength":240,"minLength":0},"category":{"enum":["food","coffee","bars","nature","entertainment","lodging","other"],"type":"string"}},"additionalProperties":false},"title":"Refine visible places","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"places.refine_view","displayName":"Refine visible places"}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Brendan-Irvine-Broque&config=eyJ1cmwiOiAiaHR0cHM6Ly9pcnZpbmVicm9xdWUuY29tL21jcCJ9"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Brendan-Irvine-Broque%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Firvinebroque.com%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Brendan-Irvine-Broque%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Firvinebroque.com%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Brendan+Irvine-Broque&connectorUrl=https%3A%2F%2Firvinebroque.com%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Brendan-Irvine-Broque\" --url \"https://irvinebroque.com/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/irvinebroque-mcp-129f65af8f","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/irvinebroque-mcp-129f65af8f/tools/{tool}","mcpServerUrl":"https://irvinebroque.com/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/irvinebroque-mcp-129f65af8f?live=1"}