If your LinkedIn feed looks anything like ours, the last few weeks have been a steady stream of screenshots: custom dashboards, live data feeds, automated workflows, all built with Claude. All built using MCPs.

And almost every explanation assumes you already know what an MCP is.

This article is for everyone who doesn't. It's the follow-up to [Part 1 of our Claude for Marketers series](/content/learn/claude-for-marketers-beginners-guide/index.html), where we covered getting started with Claude: writing in your own voice, monitoring competitors automatically, and generating ad variations with a Figma integration. MCPs came up there briefly. Here's the full picture.

We ran a second webinar on this with [Pietro](https://www.linkedin.com/in/pietromontaldo/) (who trains non-technical teams on AI), [Luuk](https://www.linkedin.com/in/luukdejonge/) from the Contrast product team, and [Louise](https://www.linkedin.com/in/louise-de-sadeleer/) from Tella. You can rewatch the webinar here, or simply follow along with the guide.

## MCP and Connector: What Are The Differences?

MCP stands for Model Context Protocol. It's an open standard created by Anthropic that defines how Claude accesses information from tools outside its own ecosystem.

If you use HubSpot, Slack, Gmail, or any other tool in your stack and want Claude to read data from those tools — or take action inside them — Claude needs a way to connect to them. MCP is the connection standard that makes that possible.

MCP Diagram (Credit: Model Context Protocol)

The confusion in most explanations comes from mixing up two related but different things: MCPs and connectors.

A **connector** is an MCP that Anthropic has reviewed, approved, and packaged for one-click installation. Think of connectors as the official, vetted option — Anthropic has assessed the integration, confirmed it meets their standards, and made it available directly inside the Claude interface. Slack, HubSpot, Gmail, and Google Drive all have connectors available today. [You can browse the full library here](https://claude.ai/customize/connectors).

The difference between MCP and Connectors (Credit: Pietro from Maven)

An **MCP** (outside the connector library) is anything Anthropic hasn't yet officially vetted, a smaller tool, a newer integration, or something you install yourself by pointing Claude at a URL or a local package. Not one-click, but still usable.

Every connector is an MCP. Not every MCP is a connector.

Browse connectors on Claude

## The 5 Levels of Connecting Claude to Your Tools

There's a clear hierarchy here, from most efficient to least. The lower the level number, the better, faster, cheaper on credits, more reliable. Always try to use the lowest available level for what you need.

The 5 different levels (Credit Pietro from Maven)

**Level 1 — Native connectors.** Built into Claude by default, no setup required. The Excel connector is one example — it's pre-installed when you download the [Claude desktop app](https://claude.ai/download).

**Level 2 — Library connectors.** Available in Anthropic's connector library. One click to install, then one click to authenticate with your account. This is where most major B2B tools live: HubSpot, Slack, Gmail, Google Drive, Notion, and more. Start here.

**Level 3 — Custom MCPs.** Tools not yet in Anthropic's library. You find the MCP yourself — usually on the tool's own documentation page — and install it manually. Two types exist:

- _Server-based MCPs_: the tool provides a URL endpoint. You paste it into Claude's custom connector field. No installation on your computer.
- _Computer-based MCPs_: require a small program running on your machine. Slightly more involved. If the setup instructions look complex, ask Claude to walk you through them step by step — that's usually the fastest route.

**Level 4 — Browser use.** No MCP exists for the tool, but Claude can still access it by opening your browser and navigating on your behalf. The process is slower and uses more credits because Claude takes screenshots, reads them, and works from what it can see. But it works for tools locked behind a login.

**Level 5 — Computer use.** The same approach as browser use, applied across your entire desktop. A last resort when nothing else is available.

For anything you'll run more than once, always try to find a Level 2 or 3 option first. Levels 4 and 5 cost significantly more credits and take considerably longer.

## How to Install a Connector: The Practical Steps

Open the Claude desktop app. Go to **Customize** in the sidebar, then select **Connectors**. Two paths from there:

**Browse connectors** opens Anthropic's vetted library. Find your tool, click the plus icon, authenticate with your account. Takes about two minutes.

**Custom connectors** is for anything not in the library. Find the tool's MCP documentation, copy the URL or endpoint, paste it into the custom connector field. If it's a server-based MCP (the simpler kind), that's all you need to do, no installation required on your computer.

Example of a served-based custom connector

Once installed, the connector persists. You don't re-authenticate each session.

## Use Case 1: A Weekly LinkedIn Performance Dashboard

LinkedIn doesn't have an MCP. The company restricts external access to its data, which means no connector exists and no workaround is available through the official library.

Use the prompt below to create this LinkedIn Dashboard

What you can do instead is browser use, Level 4. Because Claude opens your browser and navigates as you, it can access LinkedIn exactly as you would: signed in, with full access to post analytics.

The practical version: set up a scheduled task that runs once a week. Claude opens Chrome, navigates to your LinkedIn activity feed, clicks into the analytics view for each recent post and extracts impressions, reactions, saves, and engagement rate. It then compares week-on-week, identifies top-performing posts, and surfaces the patterns — which formats drive the highest save rate, which topics overperform, where engagement drops.

The output is a dashboard that updates automatically every week without you manually pulling anything.

### LinkedIn dashboard prompt template

```md
1. Open the Chrome browser tools and navigate to: https://www.linkedin.com/in/pietromontaldo/recent-activity/all/

2. Scroll through the activity feed and identify all original posts (skip reposts) published in the current Monday-to-Friday window. Use today's date to calculate the range. Note each post's hook text and relative date.

3. For every post from this week, click the "View analytics" link below it to open the full analytics page. On that page, scroll down and collect ALL of these metrics:
 - Impressions (in the Discovery section)
 - Profile viewers and followers gained (in the Profile activity section)
 - Reactions, Comments, Reposts, Saves, and Sends on LinkedIn (in the Engagement section)
 After collecting one post's analytics, navigate back and repeat for the next post.

4. Once all data is collected, create a React component (.jsx file) saved to the outputs folder using the naming convention YYYY-MM-DD-linkedin-weekly-review.jsx. The component should include:
 - Eight summary stat cards at the top (total impressions, comments, reactions, avg impressions per post, total saves, total sends, profile views, new followers)
 - A horizontal bar chart ranking posts by impressions (use Recharts), top performer in blue (hashtag#2563eb), others in gray
 - An engagement rate table showing save rate, send rate, comment rate, reaction rate, and repost rate as percentages of impressions for each post, with above-average values highlighted in blue
 - An "Engagement x Impressions" insight box analyzing which engagement metrics correlate with higher impressions this week
 - Post detail cards ordered best to worst by impressions, each showing all six metrics, save/send rates, and a 2-4 sentence analysis of why the post performed the way it did
 - Use Tailwind utility classes, clean minimal design, white background, gray borders

5. Refresh the live Cowork artifact. Update the existing artifact id `linkedin-weekly-review-mar-23-27` with `mcp__cowork__update_artifact` (do not create a new one). Regenerate its full self-contained HTML from this week's data, keeping the existing layout: eight summary stat cards, a Chart.js horizontal bar chart ranking posts by impressions (top performer hashtag#2563eb, others gray), the engagement rate table with above-average values highlighted, the insight box, and per-post detail cards ordered best to worst. Keep the `cowork-artifact-meta` name and the `<title>` generic and fixed as "LinkedIn Weekly Review" (no date in the name). Put the current Monday-to-Friday window only in the in-page header subtitle, so the artifact title stays generic across every run while the visible date reflects this week. The artifact opens in the sidebar automatically.

6. After updating the artifact, write a brief summary in the conversation covering:
 - Top performer and why
 - Underperformer insight with one specific improvement suggestion
 - Save/send standout analysis
 - Engagement driver analysis (which metric most tied to impressions this week)
 - One pattern observation
 - One actionable suggestion for next week

Important notes:
- The live deliverable is the Cowork artifact `linkedin-weekly-review-mar-23-27`. Always update it; never create a new artifact id.
- If a post was published less than 2 hours ago, flag it as early data
- The north star metric is impressions; analyze how saves, sends, comments, reactions relate to reach
- Never use double dashes in the output
- Prefix the output file with the current date: YYYY-MM-DD-linkedin-weekly-review.jsx
- Keep the written summary punchy and data-grounded, no generic advice
```

## Use Case 2: A HubSpot Webinar Performance Dashboard (with prompt)

This one is faster and more precise because HubSpot has an official connector in Anthropic's library. Install it, authenticate, and Claude can query your CRM data directly at Level 2.

Build a webinar performance dashboard on of HubSpot MCP

The use case: pull all webinar data from the past year, calculate registration and attendance rates for each event, break down traffic sources by UTM parameter, and generate an interactive HTML dashboard you can drill into by event.

Three things that make a meaningful difference here:

**Know the data model.** Most webinar platforms store events as Marketing Events. If you include that in your prompt — "look for marketing events in HubSpot" — Claude retrieves the data faster and uses fewer tokens than if you leave it to figure out the structure itself.

HubSpot's Data Model

**Write a structured prompt.** A casual ask ("build me a webinar dashboard from HubSpot") will produce something, but a prompt that specifies exactly what to retrieve (registrations, live attendance, no-show rate, UTM sources by event), what to calculate, and how to display the results produces a cleaner dashboard and is far easier to debug or reuse. Luuk's prompt for the Contrast webinar dashboard runs to about forty lines, but once written, it works every time. Scroll down to copy the prompt.

**The output is a mini web app, not a static table.** When you ask Claude to generate a dashboard, it creates an HTML file you open in your browser. It's interactive: you can click into individual events, view full registrant lists, and open contact records directly in HubSpot.

The quality of the underlying data determines how useful the dashboard gets. A webinar platform that sends registration data, watch time, poll answers, CTA clicks, and UTM attribution into HubSpot as standard gives Claude significantly more to work with than one that sends only a basic attendance flag. The pipeline attribution article linked below covers how to set up that data layer in HubSpot; the Claude MCP dashboard becomes much more powerful once that foundation is in place.

One step further: combine the HubSpot MCP with a LinkedIn MCP (unofficial options exist) to take a cohort of your most engaged attendees, people who watched over 70% and answered a poll, for example, and send connection requests to that specific group in one action. The engagement data already lives in HubSpot. The MCP puts it to work.

### Webinar performance dashboard prompt template

````md
```
# Webinar Performance Dashboard

You have the HubSpot MCP tool connected. Use ONLY the HubSpot MCP tool for all data retrieval. Do not write code, scripts, or direct API calls of any kind.

Build a webinar performance dashboard by following the steps below in order. Render the final result as a single self-contained HTML artifact using Chart.js (via CDN) for charts and vanilla CSS for styling. Do not summarize results as text — the entire output must be the HTML artifact.

---

## Step 1 — Detect webinar platform

Search `marketing_events` (limit 1, sorted by `hs_createdate` descending). Read `hs_object_source_detail_1` from the first result.

- If no marketing events exist → stop and respond: "We couldn't find a connected webinar platform in your HubSpot account. What is the name of your webinar platform?"
- If found → record the platform name. Also extract two things from the `urlTemplate` in the response:
1. The **portal ID** (the number in the URL path, e.g. `25470919`)
2. The **HubSpot domain** (either `app.hubspot.com` or `app-eu1.hubspot.com`)
Store both — you'll use them to build contact links later.

---

## Step 2 — Fetch all webinars from the last 365 days

Calculate today's date minus 365 days as an epoch millisecond timestamp.

Use `search_crm_objects` on `marketing_events` with:
- Filter: `hs_event_type = WEBINAR`
- Filter: `hs_start_datetime > [365-days-ago epoch ms]`
- Properties: `hs_event_name`, `hs_start_datetime`, `hs_registrations`, `hs_attendees`, `hs_noshows`, `hs_event_status_v2`, `hs_event_url`, `hs_object_source_detail_1`
- Sort: `hs_start_datetime` descending
- Paginate (200 per page) until all results are retrieved

Store the full list. For all performance averages and counts, use only events where `hs_event_status_v2 = completed`.

**Scale check:** Count the completed events. If there are more than 20, ask:
> "Found [N] completed webinars in the last 365 days. Pulling registrant contacts for each one will take a while. Should I show all [N] events or just the 10 most recent?"
Wait for the answer before continuing to Step 4. Step 3 always uses the full list regardless.

---

## Step 3 — Overall performance metrics

Compute from all completed events:

| Metric | Calculation |
|---|---|
| Total events hosted | Count of completed events |
| Avg registrations | Mean of `hs_registrations` |
| Avg live attendees | Mean of `hs_attendees` |
| Avg no-show rate | Mean of (`hs_noshows` / `hs_registrations`), skip events where `hs_registrations = 0` |
| Avg view time / completion rate | → "Not available with your webinar platform" |

**Overall UTM source breakdown:**

This chart shows the source distribution of contacts who registered via your webinar platform in the last 365 days.

Use `search_properties` on `contacts` with keywords matching the platform name from Step 1 to find the UTM/source property synced by that platform (e.g. `contrast_original_source`, or a similar field). Then:

- Search `contacts` where that source property `HAS_PROPERTY` and the registration date property is within the last 365 days (if a date property exists). Otherwise omit the date filter.
- Fetch the source property. Paginate until complete.
- Group by value; bucket null/empty as "Unknown".
- If no platform-specific source property is found, fall back to `hs_analytics_source` on contacts where `hs_analytics_source HAS_PROPERTY`.

Render as a donut chart in the final HTML artifact.

---

## Step 4 — Per-webinar detail

For each completed webinar in scope (most recent first), collect the following.

**Counts (already fetched in Step 2 — no additional API calls needed):**
- Registrations: `hs_registrations`
- Live attendees: `hs_attendees`
- No-shows: `hs_noshows`
- Replay attendees: → "Not available with your webinar platform"
- View time / completion rate: → "Not available with your webinar platform"
- Engagement score: → "Not available with your webinar platform"

**Registrant contact list:**

1. Use `search_properties` on `contacts` with keywords matching the platform name from Step 1 (e.g. `[
