Field guide · 10 September 2026

Skills, Servers, Surfaces

Five words that get used as if they mean the same thing. Three of them are real capabilities; two are packaging. Here is what each one actually is, where it lives on your machine, and what you touch to change it.

Three capabilities, two containers

Sort by what the thing gives Claude, and the confusion mostly dissolves.

Skillknow-how
A folder with a SKILL.md in it — instructions, sometimes helper scripts. It changes how Claude does something. It cannot reach anything new; it can only direct what is already available.
MCP serverlocalor remote
A program exposing tools over the Model Context Protocol. The only category that grants genuinely new reach, which is why it is the only one with an auth step and a scope list. A connector is the consumer-facing word for a remote one.
Extensiona place to act
Code installed inside somebody else's application — Chrome, VS Code, JetBrains. It hands Claude a surface it can operate in, typically one you are already signed into.
Plugincontainer
Not a kind of capability. A bundle that can carry skills, slash commands, subagents, hooks and MCP server definitions in one install.
Developera settings pane
Not a kind of capability either. The place in the desktop app where local MCP servers are configured.

What each one becomes

The difference that matters is what exists at the far end of the arrow.

WHERE IT IS DEFINED WHAT ACTUALLY RUNS DESTINATION This session one context window Skill ~/.claude/skills/ read Text, nothing more no process, no token instructions Local MCP server claude_desktop_config spawns A process on your Mac npx beeswax-mcp tools · stdio Web connector a URL you sign into OAuth A server elsewhere never on your machine tools · HTTP Extension Chrome, VS Code installs An app you're signed into your real browser a surface to act in
Four routes, one destination. A skill never becomes a process and holds no credential, which is why it needs no permission to install. The two middle lanes are the only ones that add reach — and they differ in whether the thing runs on your machine or someone else's.

That middle column is the whole distinction. A skill that goes wrong produces bad output. A server that goes wrong has a token and a network connection. The interfaces differ because the stakes do.

Why beeswax appears twice

It doesn't. One server, listed in one panel and edited in another.

CONNECTORS Cambridge Markets Web Gmail Web beeswax Desktop LOCAL MCP SERVERS beeswax Running One process, yours npx beeswax-mcp@latest BEESWAX_API_TOKEN pasted, in plain text cambridge-markets an endpoint you log into app.beeswaxapp.com /new_api/v1 OAuth sign-in, scopes you approve listed in edited in bearer
One row per connector, but not one kind of thing behind the rows. Cambridge Markets is a server you sign into. beeswax is a process on your Mac holding a token you pasted. The Local MCP servers panel edits that same process — it is a second door, not a second server.

The Connectors panel is an inventory of everything, tagged by origin: Web for remote servers, Desktop for local ones and built-ins like Claude in Chrome. Local MCP servers is the editor for the Desktop ones. Nothing is duplicated.

beeswax is local because it has to be — the Beeswax app exposes no MCP endpoint today. /mcp and both OAuth discovery paths return 404, so the npm package talking to /new_api/v1 with a pasted token is the only option available. Cambridge Markets shows as Web because you shipped OAuth for that one on 3 September.

What you actually touch

The interaction differs at every step, and the reason is always the credential.

SkillLocal serverWeb connectorExtensionPlugin
Gives Claudeknow-howtools and datatools and dataa surface to act inwhatever it bundles
Runs wherenowhere — it's textyour Mac, as youthe provider's serversinside another app—
Credentialnonea token you pasteOAuth, scopedthat app's own logininherits
You add it bydropping in a folderDeveloper → Edit configConnectors → Addthe app's store/plugin
You change it byediting markdownediting JSON, restartre-authorisingupdating the extensionupdating the plugin
Follows your accountno — per machineno — per machineyes — web, desktop, mobileno — per browserno — per machine

A plugin is a shipping container

Installing one unpacks into the same registries as everything else.

FINANCE PLUGIN reconciliation, sox-testing, financial-statements, journal-entry, variance-analysis, close-management… bigquery, slack 8 skills 2 servers Available immediately nothing to authorise Waiting on sign-in each needs its own OAuth
Asking "should this be a skill or a plugin?" is a category error — the question is whether a skill ships alone or bundled. Your finance plugin's eight skills work now; its BigQuery and Slack servers sit unauthorised, because servers always need permission and skills never do.

Where yours actually live

Three beeswax-family servers across two registries — the one genuine inconsistency in your setup.

All of them are live in this session, but Claude Code keeps its own registry on top of the desktop app's, so two of the three beeswax servers are invisible to that panel. That is the thing worth tidying — pick one home for the family rather than splitting it across both.

The practical version of all this. Claude keeps doing something wrong or inconsistently, and it already has the access it needs → write a skill. It cannot see or touch the system at all → you need an MCP server. It needs to act inside an app you are logged into → an extension. You want to hand someone the lot in one install → a plugin.

And the reason today's invoicing stalled sits squarely in the second row of that table: BEESWAX_API_TOKEN is a pasted string in a JSON file, scoped to the wrong account and read-only. Had Beeswax an MCP endpoint, it would have been a re-login with the right account rather than a hand-edited config.