<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ChairmanKaga</title>
    <description>The latest articles on DEV Community by ChairmanKaga (@chairmankaga).</description>
    <link>https://dev.to/chairmankaga</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4012657%2F6507102d-727c-4c05-9afc-c6d4269f264e.png</url>
      <title>DEV Community: ChairmanKaga</title>
      <link>https://dev.to/chairmankaga</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chairmankaga"/>
    <language>en</language>
    <item>
      <title>How to Manage MCP Servers in One Place on Mac</title>
      <dc:creator>ChairmanKaga</dc:creator>
      <pubDate>Mon, 31 Aug 2026 16:43:17 +0000</pubDate>
      <link>https://dev.to/chairmankaga/how-to-manage-mcp-servers-in-one-place-on-mac-5f60</link>
      <guid>https://dev.to/chairmankaga/how-to-manage-mcp-servers-in-one-place-on-mac-5f60</guid>
      <description>&lt;p&gt;If you run Claude Code, Cursor, Claude Desktop, and Codex, you already know the problem: the same MCP servers configured four times, four copies of the same API keys, and a server you disabled in one client still running in the other three. A handful of native Mac apps now exist to make that "one place." They don't all mean the same thing by it.&lt;/p&gt;

&lt;p&gt;To manage MCP servers in one place on a Mac, you install a native app that owns your MCP configuration instead of hand-editing a JSON file per client. The apps that do this split into two architectures, and which one you want depends on what "one place" means to you.&lt;/p&gt;

&lt;p&gt;Full disclosure: I build &lt;a href="https://appcontext.dev/" rel="noopener noreferrer"&gt;AppContext&lt;/a&gt;, one of the hub-style options below. The config-switcher apps are genuinely the better pick for some setups, and I'll say where.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two ways to manage MCP servers in one place
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Config switchers&lt;/strong&gt; keep one master list and write it into each client's config file for you. Add a server once, tick which clients get it, and the app updates Claude Code's, Cursor's, and Codex's files. At runtime nothing changes — every client still opens its own direct connection to every server. The app is where you &lt;em&gt;manage&lt;/em&gt; servers, not where the traffic flows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hub endpoints&lt;/strong&gt; (gateways/proxies) run the servers themselves and expose one address. Point every client at that single endpoint and the hub fans out to the real servers behind it. Now "one place" is literal: one connection per client, one process that sees every tool call — which is what makes governance possible.&lt;/p&gt;

&lt;p&gt;Both kill the four-JSON-files problem. Only the second gives you a single choke point where you can block a dangerous tool or rate-limit a chatty one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Mac apps, compared
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;App&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;macOS&lt;/th&gt;
&lt;th&gt;Notable&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.josh.ing/mymcp" rel="noopener noreferrer"&gt;MyMCP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Config switcher&lt;/td&gt;
&lt;td&gt;Free, open source (MIT)&lt;/td&gt;
&lt;td&gt;15.0+&lt;/td&gt;
&lt;td&gt;Menu bar; browses the MCP registry; installs to multiple clients at once&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://apps.apple.com/us/app/mcp-one-mcp-server-manager/id6748261474" rel="noopener noreferrer"&gt;MCP One&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Config switcher&lt;/td&gt;
&lt;td&gt;Free; $17.99 lifetime IAP&lt;/td&gt;
&lt;td&gt;13.0+&lt;/td&gt;
&lt;td&gt;Server "clusters"; marketplace; App Store; 100% local&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://mcporchestrator.app/" rel="noopener noreferrer"&gt;MCP Orchestrator&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Hub endpoint&lt;/td&gt;
&lt;td&gt;Free beta&lt;/td&gt;
&lt;td&gt;15.0+&lt;/td&gt;
&lt;td&gt;One endpoint; background daemon; SKILL.md deployment; native Swift&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://appcontext.dev/" rel="noopener noreferrer"&gt;AppContext&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Hub endpoint&lt;/td&gt;
&lt;td&gt;Free (Pro adds governance + live view)&lt;/td&gt;
&lt;td&gt;Universal&lt;/td&gt;
&lt;td&gt;Per-tool authorization policies; iOS Simulator + browser live view&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All four are macOS-only today.&lt;/p&gt;

&lt;h2&gt;
  
  
  Config switchers: stop editing JSON, keep direct connections
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.josh.ing/mymcp" rel="noopener noreferrer"&gt;MyMCP&lt;/a&gt; is the one to try first if free and open source matters. It's an MIT-licensed macOS 15+ menu bar app: browse the official MCP registry, install servers to multiple clients simultaneously, one-click enable/disable with status at a glance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apps.apple.com/us/app/mcp-one-mcp-server-manager/id6748261474" rel="noopener noreferrer"&gt;MCP One&lt;/a&gt; is similar with a nicer distribution story — Mac App Store, macOS 13+, free with an optional $17.99 lifetime unlock. Its angle is grouping servers into "clusters" you switch between, updating your agents' MCP files across Claude Code, Cursor, Claude, Codex, Windsurf, and Roo Code.&lt;/p&gt;

&lt;p&gt;Both do exactly what they promise. The ceiling is architectural: because they write per-client configs, each client still talks straight to each server. There's no shared layer to enforce a policy at. If all you want is to stop hand-editing JSON, that ceiling never bothers you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hub endpoints: one connection, and a place to enforce rules
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://mcporchestrator.app/" rel="noopener noreferrer"&gt;MCP Orchestrator&lt;/a&gt; is a native-Swift macOS 15+ app in free beta that runs a login-time background daemon and has you point Cursor, Claude Desktop, Claude Code, and Codex at it — "one config instead of many," plus SKILL.md playbook deployment and a tool preview.&lt;/p&gt;

&lt;p&gt;AppContext is the other hub, and where it diverges is the two things a single choke point unlocks that a config switcher structurally can't:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Per-tool authorization policies.&lt;/strong&gt; Every call passes through the hub, so you can block an individual tool — a filesystem &lt;code&gt;delete_file&lt;/code&gt;, a GitHub &lt;code&gt;create_repository&lt;/code&gt; — and the agent gets a &lt;code&gt;POLICY_BLOCKED&lt;/code&gt; error instead of doing the thing. Blocklist mode (up to three tools) is free; unlimited blocks, allowlist/default-deny mode, and per-tool rate limits are Pro.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live visual context.&lt;/strong&gt; &lt;code&gt;fetch_liveview&lt;/code&gt; returns a fresh capture of your iOS Simulator or a Chrome tab, plus Metro and browser console logs, so an agent can verify its own UI change instead of asking you to screenshot it. Pro feature, macOS-only. No other app in this comparison does visual context at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Trade-offs, plainly: AppContext is macOS-only, and the two headline extras — unlimited policies and live view — are Pro. Aggregating servers behind one endpoint, importing them from your existing clients, and blocking your first few dangerous tools are free.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up the hub approach
&lt;/h2&gt;

&lt;p&gt;One-time setup. Import your existing servers from Claude Code, Cursor, or Claude Desktop in the app, then point each client at the single local endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; sse appcontext http://localhost:7777/sse
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart the client and every aggregated tool shows up under one connection, namespaced by server (e.g. &lt;code&gt;filesystem:read_file&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Which should you pick?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Just want to stop editing four JSON files:&lt;/strong&gt; a config switcher. MyMCP (free/OSS) or MCP One (App Store, clusters).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Want one real connection per client:&lt;/strong&gt; a hub — MCP Orchestrator or AppContext.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Want to restrict what your agents can do:&lt;/strong&gt; a hub with policies — AppContext's home turf.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Building mobile/web UIs and want the agent to see its own work:&lt;/strong&gt; AppContext adds live view of the iOS Simulator and browser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On Windows or Linux:&lt;/strong&gt; none of these yet — all macOS-native.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;"Manage MCP servers in one place" turns out to be two different products wearing one search query. If the pain is config sprawl, a switcher solves it for free. If you also want a single point where you can see and gate every tool call — and, for app developers, give the agent eyes — that's a hub.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>claude</category>
      <category>cursor</category>
      <category>macos</category>
    </item>
    <item>
      <title>How to Let Claude Code See Your App While Coding</title>
      <dc:creator>ChairmanKaga</dc:creator>
      <pubDate>Mon, 31 Aug 2026 16:36:10 +0000</pubDate>
      <link>https://dev.to/chairmankaga/how-to-let-claude-code-see-your-app-while-coding-3hn3</link>
      <guid>https://dev.to/chairmankaga/how-to-let-claude-code-see-your-app-while-coding-3hn3</guid>
      <description>&lt;p&gt;If you've ever watched an agent confidently "fix" a layout bug it has never actually looked at, this one's for you. Here are the four ways to give Claude Code eyes on your running app — and which one fits which stack.&lt;/p&gt;

&lt;p&gt;To let Claude Code see your app while coding, connect a tool it can call to capture what's actually rendered: a browser MCP server for web apps, a live-view MCP server for the iOS Simulator and browser tabs, or Claude Code's built-in computer use for everything else. Once one of these is connected, Claude checks its own work after every change instead of relying on your descriptions of what's on screen.&lt;/p&gt;

&lt;p&gt;We build &lt;a href="https://appcontext.dev/docs/mcp-server-ios-web-screenshots/" rel="noopener noreferrer"&gt;AppContext&lt;/a&gt;, one of the options below, so we're not a neutral party — but the honest answer to this question depends on what kind of app you're building, and for some stacks the right tool isn't ours. Here's the current landscape, followed by what the automated see-edit-verify loop actually looks like once it's running.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Claude Code needs a way to see your app
&lt;/h2&gt;

&lt;p&gt;Claude Code reads your files, runs your build, and edits your components, but it has no idea what any of that renders to. It can write plausible CSS and still ship a button clipped off the right edge of the screen, because “compiles cleanly” and “looks right” are different facts.&lt;/p&gt;

&lt;p&gt;Anthropic's own &lt;a href="https://code.claude.com/docs/en/best-practices" rel="noopener noreferrer"&gt;best-practices guide for Claude Code&lt;/a&gt; is blunt about the fix: “Give Claude a check it can run: tests, a build, a screenshot to compare. It's the difference between a session you watch and one you walk away from.” For logic, the check is a test suite. For UI, the check is visual — and if the agent can't capture it on its own, you become the verification loop. Every regression waits for you to notice it, screenshot it, and paste it into the terminal.&lt;/p&gt;

&lt;p&gt;Everything below is a way to hand that job to the agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four ways to let Claude Code see your app
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;What it can see&lt;/th&gt;
&lt;th&gt;Requirements&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Manual screenshots&lt;/td&gt;
&lt;td&gt;Anything you capture yourself&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;One-off questions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser MCP server&lt;/td&gt;
&lt;td&gt;Web apps in a browser it controls&lt;/td&gt;
&lt;td&gt;Node.js; free&lt;/td&gt;
&lt;td&gt;Web frontends&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Computer use&lt;/td&gt;
&lt;td&gt;Your whole screen&lt;/td&gt;
&lt;td&gt;macOS; Claude Pro/Max plan&lt;/td&gt;
&lt;td&gt;Native apps, GUI-only tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Live-view MCP server&lt;/td&gt;
&lt;td&gt;iOS Simulator + Chrome tabs, plus logs&lt;/td&gt;
&lt;td&gt;macOS; live view is a Pro feature&lt;/td&gt;
&lt;td&gt;React Native / Expo + web&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  1. Paste screenshots by hand
&lt;/h3&gt;

&lt;p&gt;The baseline. Claude Code accepts pasted images, so you can screenshot the simulator or browser and drop the image into your prompt. It works for anything, costs nothing, and is fine for occasional questions. The problem is who does the capturing: you, on every iteration. The agent can't re-check its own fix, so the loop never closes without you standing in the middle of it.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. A browser MCP server (web apps)
&lt;/h3&gt;

&lt;p&gt;For web frontends there are two free, officially maintained options. &lt;a href="https://github.com/ChromeDevTools/chrome-devtools-mcp" rel="noopener noreferrer"&gt;Chrome DevTools MCP&lt;/a&gt;, maintained by the Chrome DevTools team, gives the agent a Chrome instance it can navigate, screenshot, and inspect — console messages, network requests, and performance traces included. &lt;a href="https://github.com/microsoft/playwright-mcp" rel="noopener noreferrer"&gt;Playwright MCP&lt;/a&gt;, from Microsoft, leans on accessibility-tree snapshots — structured text the model reads directly — with screenshots as a secondary tool.&lt;/p&gt;

&lt;p&gt;Both are excellent at what they cover, and what they cover is a browser they launched: your web app, yes; your iOS Simulator, your Metro terminal, or a native window, no.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Claude Code computer use (anything on screen)
&lt;/h3&gt;

&lt;p&gt;Claude Code now ships &lt;a href="https://code.claude.com/docs/en/computer-use" rel="noopener noreferrer"&gt;computer use&lt;/a&gt; as a built-in MCP server you enable from the &lt;code&gt;/mcp&lt;/code&gt; menu. It's the broadest option: Claude can launch apps, click, type, and screenshot anything on your display, including the iOS Simulator or a native macOS app. It's also the heaviest. It's a research preview, macOS-only in the CLI, requires a Pro or Max plan, hides your other apps while it works, and takes a machine-wide lock so only one session can use it at a time.&lt;/p&gt;

&lt;p&gt;Anthropic's docs are upfront about where it sits in the tool hierarchy: Claude tries the most precise tool first, and “if you have an MCP server for the service, Claude uses that.” Screen control is the fallback for things nothing else can reach — not what you want firing on every iteration of a CSS tweak.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. A live-view MCP server (iOS Simulator and web, with logs)
&lt;/h3&gt;

&lt;p&gt;This is the gap AppContext fills. It's a macOS menu bar app that gives AI coding agents live visual context over MCP: &lt;code&gt;fetch_liveview&lt;/code&gt; returns a fresh capture of the iOS Simulator or a Chrome tab you pick, &lt;code&gt;fetch_recent_logs&lt;/code&gt; streams Metro bundler output for React Native and Expo apps, and &lt;code&gt;fetch_web_console&lt;/code&gt; returns browser console logs. No browser takeover, no screen lock — the agent grabs exactly the surface it needs in one tool call and keeps working. The trade-offs, stated plainly: it's macOS-only, and live view is a Pro feature (the MCP Hub side of the app is free).&lt;/p&gt;

&lt;p&gt;If you're all-in on Expo specifically, the official &lt;a href="https://docs.expo.dev/mcp/" rel="noopener noreferrer"&gt;Expo MCP&lt;/a&gt; is also worth a look: it adds screenshots, tap automation, and element inspection for Expo SDK 54+ projects with a running dev server.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the automated loop actually looks like
&lt;/h2&gt;

&lt;p&gt;Here's the workflow shift, using a bug class we hit constantly in React Native work: a bottom sheet renders behind the tab bar on one screen. Without visual access, you describe it in words, Claude picks one of three plausible z-index theories, and you paste a fresh screenshot between every attempt.&lt;/p&gt;

&lt;p&gt;With a live-view tool connected, the prompt changes shape:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The bottom sheet on the settings screen renders behind the tab bar.
Fix it, then fetch the live view and confirm the sheet is on top.
Check the Metro logs if anything throws.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the session runs like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Claude calls &lt;code&gt;fetch_liveview&lt;/code&gt; and sees the broken state directly — no description tax, no guessing which theory matches reality.&lt;/li&gt;
&lt;li&gt;It pulls &lt;code&gt;fetch_recent_logs&lt;/code&gt;, checks for warnings from the sheet library, and edits the component.&lt;/li&gt;
&lt;li&gt;Metro hot-reloads. Claude calls &lt;code&gt;fetch_liveview&lt;/code&gt; again and compares against what it saw before.&lt;/li&gt;
&lt;li&gt;Still wrong? It iterates without waiting for you. Fixed? It shows you the final capture as evidence instead of asserting success.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The load-bearing phrase in that prompt is “then fetch the live view and confirm.” You're giving the agent the check, not just the task — exactly the pattern the best-practices doc pushes. Once the tool exists, one sentence turns any UI request into a self-verifying one. Agents often reach for the tool unprompted after the first use; early in a session, a nudge helps.&lt;/p&gt;

&lt;p&gt;The same loop covers web work. Switch AppContext's platform to a Chrome tab and the identical prompt pattern handles a layout regression in a Next.js app, with &lt;code&gt;fetch_web_console&lt;/code&gt; standing in for Metro logs when something throws at runtime.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which one should you pick?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pure web app, Claude Code only:&lt;/strong&gt; start with Chrome DevTools MCP or Playwright MCP. Free, official, and purpose-built for the browser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React Native or Expo on the iOS Simulator:&lt;/strong&gt; a live-view MCP server. Browser MCP servers can't see the Simulator, and computer use is too heavyweight to fire on every iteration. This is AppContext's home turf — simulator captures and Metro logs in the same session. Expo MCP is a solid alternative if your project is Expo SDK 54+.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native macOS apps or GUI-only tools:&lt;/strong&gt; computer use is the only option on this list that can see them at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More than one agent (Claude Code plus Cursor, Windsurf, or Claude Desktop):&lt;/strong&gt; favor plain MCP servers over client-specific features. Computer use and the Claude Desktop preview pane are Claude-only; an MCP server works in every client that speaks the protocol.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Connecting it to Claude Code
&lt;/h2&gt;

&lt;p&gt;The AppContext setup is two steps — the full walkthrough lives in our &lt;a href="https://appcontext.dev/docs/claude-code-visual-context/" rel="noopener noreferrer"&gt;Claude Code visual context guide&lt;/a&gt;. Install the app from appcontext.dev, then register the local endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; sse appcontext http://localhost:7777/sse
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart Claude Code and the tools appear in &lt;code&gt;/mcp&lt;/code&gt;. With your simulator or dev server running, ask for any UI change plus a “verify it” clause and watch the loop close on its own.&lt;/p&gt;

&lt;h2&gt;
  
  
  One connection, every agent
&lt;/h2&gt;

&lt;p&gt;The quiet advantage of the MCP route is that nothing about it is Claude Code-specific. Cursor, Windsurf, and Claude Desktop speak the same protocol, so the same local endpoint gives every agent you use the same eyes. AppContext also works as a &lt;a href="https://appcontext.dev/docs/mcp-hub/" rel="noopener noreferrer"&gt;personal MCP hub&lt;/a&gt;, so your visual-context tools and the rest of your MCP servers ride one connection per client instead of &lt;a href="https://appcontext.dev/blog/manage-mcp-servers-in-one-place-mac/" rel="noopener noreferrer"&gt;a config file per tool&lt;/a&gt; — with per-tool &lt;a href="https://appcontext.dev/docs/mcp-authz/" rel="noopener noreferrer"&gt;authorization policies&lt;/a&gt; deciding what each agent is allowed to call.&lt;/p&gt;

&lt;p&gt;The difference between an agent you supervise and one you can walk away from on UI work is a check it can run itself. Give Claude Code a way to see your app — whichever of the four fits your stack — and the screenshot-paste treadmill goes away.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Can Claude Code see my screen without any setup?
&lt;/h3&gt;

&lt;p&gt;No. Out of the box, Claude Code only sees what you paste into the prompt. To let it capture your app on its own you need to enable its built-in computer use (macOS, Pro or Max plan) or connect an MCP server that exposes screenshot tools, such as Chrome DevTools MCP for web apps or AppContext for the iOS Simulator and browser tabs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can Claude Code take screenshots of the iOS Simulator?
&lt;/h3&gt;

&lt;p&gt;Yes, three ways: run &lt;code&gt;xcrun simctl io booted screenshot&lt;/code&gt; yourself and paste the image; enable Claude Code's computer use and let it drive the Simulator window; or connect a live-view MCP server like AppContext so the agent fetches a fresh simulator capture in a single tool call, alongside Metro bundler logs.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the difference between computer use and an MCP screenshot server?
&lt;/h3&gt;

&lt;p&gt;Computer use is general screen control: it can see and click anything, but it's a research preview, hides your other apps while working, holds a machine-wide lock, and requires a Pro or Max Claude plan. An MCP screenshot server exposes one purpose-built tool call that returns a capture of a specific surface without taking over your screen. Claude Code's own docs recommend using an MCP server when one exists and reserving screen control for what nothing else can reach.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does the same setup work with Cursor and Windsurf?
&lt;/h3&gt;

&lt;p&gt;If you go the MCP route, yes. MCP is an open standard, so a server like AppContext configured once works in Claude Code, Cursor, Windsurf, and Claude Desktop alike. Client-specific features such as Claude Code's computer use or the Claude Desktop preview pane don't transfer to other agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is any of this free?
&lt;/h3&gt;

&lt;p&gt;Chrome DevTools MCP and Playwright MCP are free and open source. Claude Code's computer use requires a Claude Pro or Max plan. AppContext's MCP Hub is free; its live view for the iOS Simulator and web is a Pro feature, and the app is macOS-only.&lt;/p&gt;

</description>
      <category>claude</category>
      <category>mcp</category>
      <category>ios</category>
      <category>ai</category>
    </item>
    <item>
      <title>Configure MCP servers once for Claude Code, Cursor, and Windsurf</title>
      <dc:creator>ChairmanKaga</dc:creator>
      <pubDate>Mon, 31 Aug 2026 16:36:06 +0000</pubDate>
      <link>https://dev.to/chairmankaga/configure-mcp-servers-once-for-claude-code-cursor-and-windsurf-3dlh</link>
      <guid>https://dev.to/chairmankaga/configure-mcp-servers-once-for-claude-code-cursor-and-windsurf-3dlh</guid>
      <description>&lt;p&gt;If you run more than one AI coding tool, you've done this: added an MCP server, then added it again, then added it a third time. No client reads another client's config. Claude Code, Cursor, and Windsurf each keep their own file in their own place.&lt;/p&gt;

&lt;p&gt;There are exactly two ways out — sync one canonical block into every file, or run a local hub that every client points at once. Here's the map first, then the tradeoffs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where each tool actually keeps its MCP config
&lt;/h2&gt;

&lt;p&gt;As of August 2026, from each vendor's current docs:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Config file&lt;/th&gt;
&lt;th&gt;Top-level key&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code — user scope&lt;/td&gt;
&lt;td&gt;&lt;code&gt;~/.claude.json&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mcpServers&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code — local scope (default)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;~/.claude.json&lt;/code&gt;, nested under the project path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mcpServers&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code — project scope&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;.mcp.json&lt;/code&gt; in the project root&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mcpServers&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cursor — global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;~/.cursor/mcp.json&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mcpServers&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cursor — project&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.cursor/mcp.json&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mcpServers&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windsurf (Cascade)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;~/.codeium/windsurf/mcp_config.json&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mcpServers&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Desktop (macOS)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;~/Library/Application Support/Claude/claude_desktop_config.json&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mcpServers&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;They all use &lt;code&gt;mcpServers&lt;/code&gt;, which is why copy-paste mostly works — and why this problem looks smaller than it is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four ways the copies drift
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Claude Code resolves duplicates by precedence and doesn't merge.&lt;/strong&gt; Local beats project beats user, and the winning entry is used &lt;em&gt;whole&lt;/em&gt; — fields are not merged across scopes. Rotate a key in your committed &lt;code&gt;.mcp.json&lt;/code&gt; while a stale local-scoped entry with the same name sits in &lt;code&gt;~/.claude.json&lt;/code&gt;, and the stale one silently wins. &lt;code&gt;claude mcp list&lt;/code&gt; shows what actually resolved.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Remote-server key names differ.&lt;/strong&gt; stdio servers are fine everywhere (&lt;code&gt;command&lt;/code&gt; + &lt;code&gt;args&lt;/code&gt;). Remote is where it breaks: Claude Code and Cursor use &lt;code&gt;url&lt;/code&gt;, but &lt;a href="https://docs.devin.ai/desktop/cascade/mcp" rel="noopener noreferrer"&gt;Windsurf's documented example&lt;/a&gt; uses &lt;code&gt;serverUrl&lt;/code&gt;. Paste a Cursor block into Windsurf and it may just not connect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Transport names are moving.&lt;/strong&gt; &lt;a href="https://code.claude.com/docs/en/mcp" rel="noopener noreferrer"&gt;Claude Code's docs&lt;/a&gt; now say the SSE transport is deprecated, use HTTP where available. It also takes &lt;code&gt;streamable-http&lt;/code&gt; as an alias for &lt;code&gt;http&lt;/code&gt;. Old configs keep working but stop matching the docs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Every client pays for every server, with different budgets.&lt;/strong&gt; Windsurf's docs state Cascade has a limit of 100 total tools at any given time. Claude Code instead warns above 10,000 tokens of MCP output and caps at 25,000 by default (&lt;code&gt;MAX_MCP_OUTPUT_TOKENS&lt;/code&gt;). One chatty server added to four files pushes on four different limits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 1: sync a canonical block
&lt;/h2&gt;

&lt;p&gt;Keep the master &lt;code&gt;mcpServers&lt;/code&gt; block in dotfiles and write it into each client's file. Costs nothing, works fine. Two honest limits: you own the sync forever including the per-client key differences above, and nothing changes at runtime — four clients still spawn four copies of every stdio server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 2: one endpoint
&lt;/h2&gt;

&lt;p&gt;A personal MCP hub is itself an MCP server, but instead of exposing its own tools it connects to your upstream servers and re-exposes theirs behind one address. Each client gets exactly one entry, forever. Tools get namespaced (&lt;code&gt;filesystem:read_file&lt;/code&gt;) so two servers that both define &lt;code&gt;search&lt;/code&gt; don't collide.&lt;/p&gt;

&lt;p&gt;I build &lt;a href="https://appcontext.dev" rel="noopener noreferrer"&gt;AppContext&lt;/a&gt;, a macOS menu bar app that does this — it serves its endpoint at &lt;code&gt;http://localhost:7777/sse&lt;/code&gt;. Concretely:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Get existing servers in.&lt;/strong&gt; The Servers tab imports from Claude Code (&lt;code&gt;~/.claude.json&lt;/code&gt;), Claude Desktop, and Cursor (&lt;code&gt;~/.cursor/mcp.json&lt;/code&gt;), and discovers project &lt;code&gt;.mcp.json&lt;/code&gt; files. Windsurf isn't an import source today, so anything living only in &lt;code&gt;mcp_config.json&lt;/code&gt; gets added by hand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Point each client at it.&lt;/strong&gt; Claude Code, at user scope:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; sse &lt;span class="nt"&gt;--scope&lt;/span&gt; user appcontext http://localhost:7777/sse
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AppContext serves SSE today, so that's the right flag even though Claude Code labels SSE deprecated in favour of HTTP.&lt;/p&gt;

&lt;p&gt;Cursor, in &lt;code&gt;~/.cursor/mcp.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"appcontext"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:7777/sse"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Windsurf, in &lt;code&gt;~/.codeium/windsurf/mcp_config.json&lt;/code&gt; — different key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"appcontext"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"serverUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:7777/sse"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Then delete the old direct entries.&lt;/strong&gt; Skipping this is the worst of both worlds — every tool exposed twice, once direct and once namespaced.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that's actually useful
&lt;/h2&gt;

&lt;p&gt;One endpoint means every tool call from every client passes through one place. Blocking an individual tool — the destructive filesystem call, the repo-creating GitHub tool — applies to every client at once instead of being re-done per client, and the free tier covers up to three blocks in total across all your servers. Beyond three, allowlist mode and per-tool rate limiting are Pro. Blocked calls return &lt;code&gt;POLICY_BLOCKED&lt;/code&gt; to the agent rather than failing silently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Caveats
&lt;/h2&gt;

&lt;p&gt;A hub is a component between your agents and your tools. If it's not running, no client has MCP tools — versus per-client configs, where a broken config only breaks one tool.&lt;/p&gt;

&lt;p&gt;AppContext is macOS-only today. It serves SSE rather than Streamable HTTP. And it has no audit log or activity dashboard yet — you can block and rate-limit calls, but you can't review a history of what was called.&lt;/p&gt;

&lt;p&gt;If you only use one AI coding tool, don't bother: edit the one file. Once you're maintaining the same list in two or more places, the copies &lt;em&gt;will&lt;/em&gt; drift, and the only question is whether you'd rather own a sync script or a single endpoint.&lt;/p&gt;

&lt;p&gt;Full version with sources: &lt;a href="https://appcontext.dev/blog/configure-mcp-servers-once-claude-code-cursor-windsurf/" rel="noopener noreferrer"&gt;appcontext.dev/blog/configure-mcp-servers-once-claude-code-cursor-windsurf&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>claudecode</category>
      <category>cursor</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
