Development Choices

IDE Extension or MCP Server for the Same Vendor

Author
Drew Youngwerth Software Engineer
Published
Section
AI Agents
Length
6 min read3 sources cited

An IDE extension and an MCP server for the same vendor cover different callers. The extension gives a developer a visual surface to browse, search and upload assets; the server exposes those same operations to a model as callable tools that cost context. Only the server's configuration is committable, which makes it the team-level decision.

Two front doors to the same operations

When a vendor ships both an IDE extension and an MCP server, it has built two entrances to one set of operations: browse a media library, search it, upload a file, get a delivery URL back. Cloudinary is the current worked example — a VS Code extension for browsing and uploading assets from the editor, and a set of MCP servers covering asset management, environment config, structured metadata, analysis and MediaFlows. The operations overlap almost completely. What differs is who can call them, what the call costs you, and who on the team gets to decide.

The one difference that generates the rest

An extension gives a developer a visual surface: a panel inside the editor to browse, search and upload assets directly, with an asset shown as a thumbnail rather than described as a JSON blob. An MCP server exposes those same operations to a model as callable tools, declared in the schema form the Model Context Protocol specification defines, so an assistant or an agent can invoke them with no one clicking anything.

The caller is a person in one case and a model in the other. Every criterion below is a consequence of that.

Cost, and what each one cannot do

An extension costs no context. It is not part of any prompt, so its presence never competes with your code for room in a model’s window — and it cannot be invoked by a model at all. An assistant working in the same editor has no idea the panel exists.

A server costs context per tool definition. Every tool the server advertises is described to the model before the conversation starts, and that description is paid for on every request whether or not the tool is used. This is the cost that hides best, because it shows up as a slightly larger bill on unrelated work rather than as a line item against media handling; if you care where it lands, it belongs in whatever scheme you already use for attributing agent cost and latency to the work that caused it. And a server cannot show a person what an asset looks like. It can return an ID, a URL and a set of dimensions, which is enough for a model and not enough for someone deciding whether the hero image is the right one.

CriterionIDE extensionMCP server
Who invokes ita developer, by clickinga model, as a tool call
Context costnoneone tool definition per tool, every request
Can show what an asset looks likeyesno
Unit of installationone editor, one developerconfiguration committable to the repo

Which of the two is actually a team decision

Extensions are per-editor and per-developer. Someone installs one in their own VS Code, and that install covers that person and no one else; a colleague on a different editor gets nothing, and there is no way to make the choice for the team short of writing it in a README and hoping.

Server configuration can be committed to the repository, and that is the asymmetry that matters most in practice. A committed server config means every developer and every CI agent that opens the repo sees the same tools with the same names — which also means one person’s decision to add a server lands in everyone’s context budget. Credentials are the part that does not commit: Cloudinary’s remote servers use OAuth while local servers need manual credentials supplied per machine, so what you check in is endpoints and wiring, not secrets.

So only one of the two is a team-level decision at all. Treat the extension as a personal tool, like a keybinding, and the server as a dependency — reviewed, versioned, and removable by the same process that adds it. The same reasoning applies to the other repo-committed agent surfaces vendors ship, which is why vendor-published skills and MCP servers are worth weighing against each other before you accept both.

The vendor’s own position: run both

Cloudinary positions the two as complementary rather than competing, recommending visual browsing through the extension alongside programmatic work through the MCP server. That is a reasonable reading of the evidence above rather than a sales line — the two surfaces fail in exactly opposite directions, and neither substitutes for the other. A developer who needs to see six candidate images gets nothing useful from a tool call, and an agent renaming four hundred assets gets nothing useful from a panel.

The cost of running both is one context budget plus one editor install, not two of anything.

Expect the configuration to move

Both surfaces shipped in a beta state, and a team adopting either should plan for the configuration surface to move underneath it — tool names, server endpoints and setup steps are the parts that change first, and they are exactly the parts you will have committed. Checked 2026-08-18, Cloudinary’s MCP server documentation no longer carries a Beta label, but the shape has visibly shifted since: there are now five remote endpoints, and the companion Skills pack that vendors ship for coding assistants has grown a fourth skill that three-month-old third-party write-ups do not mention.

The practical consequence: pin what you can, keep the server config in one file rather than scattered across per-developer settings, and re-read the vendor’s setup page before debugging a broken tool call. A tool that vanished is indistinguishable from a tool that was renamed, from inside a failing agent run.

Which to pick when

Pick the extension if the work is a person choosing an asset. Picking a hero image, checking a crop, confirming an upload landed in the right folder — anything where the answer is visual, the extension wins outright and costs nothing. It is also the right pick when your context budget is already tight and media work is occasional.

Pick the MCP server if a model has to do the work unattended. Bulk renames, metadata backfills, generating delivery URLs inside a code-generation loop, anything multi-step with no human in the loop. Accept the per-request context cost as the price of the model being able to act at all.

Pick both, in that order, if you have a team doing both kinds of work — which is most teams shipping a media-heavy product. Install the extension individually, commit the server config once, and review the server’s tool list the same way you review a dependency: if a tool is never called, it is still being paid for.

Pick neither yet if you are evaluating. Neither surface is load-bearing for using the underlying product, both are still moving, and a week spent with the API directly tells you more about whether the operations fit your workflow than a week spent wiring up two ways to call them.

Sources

  1. VS Code extension for browsing and uploading assets from the editor cloudinary.com
  2. MCP servers covering asset management, environment config, structured metadata, analysis and MediaFlows cloudinary.com
  3. Model Context Protocol specification modelcontextprotocol.io

See also