<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/one-button-every-mcp-client-fszdibnw4" -->

---
title: One Button, Every MCP Client | daily.dev
description: Publishing an MCP server today requires writing separate install instructions for every client (Claude Desktop, Cursor, VS Code, Windsurf, etc.), creating a...
canonical: https://daily.dev/posts/one-button-every-mcp-client-fszdibnw4
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: One Button, Every MCP Client | daily.dev
og:description: Publishing an MCP server today requires writing separate install instructions for every client (Claude Desktop, Cursor, VS Code, Windsurf, etc.), creating a...
og:url: https://daily.dev/posts/one-button-every-mcp-client-fszdibnw4
og:image: https://api.daily.dev/og/posts/fsZdiBnW4.png
og:image:alt: One Button, Every MCP Client
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# One Button, Every MCP Client

**[API Evangelist](https://daily.dev/sources/apievangelist)** · 5 min read · 0 upvotes · 0 comments

## Summary

Publishing an MCP server today requires writing separate install instructions for every client (Claude Desktop, Cursor, VS Code, Windsurf, etc.), creating a fragmented and quickly outdated experience. To solve this, the author built install.apicommons.org — a universal install button for MCP servers. Providers configure their server once and get a single button that handles one-click deep links, CLI commands, per-OS config snippets, and web connector walkthroughs for 26+ clients. The button carries a pointer (MCP Registry name or server.json URL) rather than the full config, so installs stay current. The core artifact is clients.json, an open machine-readable registry of how every MCP client installs a server, validated by a JSON Schema. Providers can embed it as a web component with a single script tag and custom element, and the registry is open for community contributions.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://apievangelist.com/2026/07/03/one-button-every-mcp-client>

## Questions this post answers

### How does the universal MCP install button avoid going stale when a server's config changes?

It stores a pointer rather than the actual configuration. The button embeds either the server's MCP Registry name (like io.apis/apis-io) or the URL of a hosted server.json manifest, and the hosted chooser resolves that pointer at click time, detecting the visitor's OS and rendering the correct install path. Because the source of truth stays canonical, previously distributed buttons remain accurate even after a header or transport changes.

_daily.dev surfaces practical breakdowns like this for developers shipping MCP servers without a stale README._

### What is clients.json and what does it describe for MCP client installation?

clients.json is an open, machine-readable registry describing how each MCP client installs a server: deep-link URL formats, CLI command templates with token slots for env and header flags, config-file root keys and per-OS paths, and connector steps for hosted web clients. It currently covers twenty-six clients, each format verified against vendor docs and validated against a published JSON Schema, and is designed for others to build on freely.

_anyone tracking fragmented MCP client tooling can follow updates like this via daily.dev._

### How can a remote-only MCP server be installed in a client that only supports stdio?

The install chooser auto-generates a labeled mcp-remote bridge command for stdio-only clients, so a remote-only server can still be installed even in clients that do not natively support remote MCP connections. This ensures no client is left out of the universal install flow regardless of whether the server is remote or local.

_developers wiring MCP servers into varied clients can keep up with fixes like this through daily.dev._

## Similar posts on daily.dev

- [A Universal Install Interface for MCP Servers](https://daily.dev/posts/a-universal-install-interface-for-mcp-servers-7jfqoatsd) · API Evangelist · 0 upvotes · 0 comments
- [How to find, install, and manage MCP servers with the GitHub MCP Registry](https://daily.dev/posts/how-to-find-install-and-manage-mcp-servers-with-the-github-mcp-registry-gcfkdmzt1) · GitHub Blog · 2 upvotes · 0 comments
- [Ship your C\# MCP Server as a one-click bundle with MCPB](https://daily.dev/posts/ship-your-c-mcp-server-as-a-one-click-bundle-with-mcpb-ddy75o5wf) · The Art of Simplicity · 12 upvotes · 1 comments

---

Tags: [#open-source](https://daily.dev/tags/open-source), [#devtools](https://daily.dev/tags/devtools), [#mcp](https://daily.dev/tags/mcp)

[View this post on daily.dev](https://daily.dev/posts/one-button-every-mcp-client-fszdibnw4)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"One Button, Every MCP Client","url":"https://daily.dev/posts/one-button-every-mcp-client-fszdibnw4","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/one-button-every-mcp-client-fszdibnw4"},"datePublished":"2026-07-03T12:09:35.166Z","dateModified":"2026-09-13T21:16:08.830Z","description":"Publishing an MCP server today requires writing separate install instructions for every client (Claude Desktop, Cursor, VS Code, Windsurf, etc.), creating a...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/3bdfc4af01a3e2f1f2c0cd873d63e314?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/3bdfc4af01a3e2f1f2c0cd873d63e314?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"API Evangelist","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"API Evangelist","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/a36244ae67bc4f41a605f780267ecb5f","url":"https://daily.dev/sources/apievangelist"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/one-button-every-mcp-client-fszdibnw4","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"open-source,devtools,mcp","timeRequired":"PT5M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"API Evangelist","item":"https://daily.dev/sources/apievangelist"},{"@type":"ListItem","position":3,"name":"One Button, Every MCP Client"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/one-button-every-mcp-client-fszdibnw4#faq","mainEntity":[{"@type":"Question","name":"How does the universal MCP install button avoid going stale when a server's config changes?","acceptedAnswer":{"@type":"Answer","text":"It stores a pointer rather than the actual configuration. The button embeds either the server's MCP Registry name (like io.apis/apis-io) or the URL of a hosted server.json manifest, and the hosted chooser resolves that pointer at click time, detecting the visitor's OS and rendering the correct install path. Because the source of truth stays canonical, previously distributed buttons remain accurate even after a header or transport changes. daily.dev surfaces practical breakdowns like this for developers shipping MCP servers without a stale README."}},{"@type":"Question","name":"What is clients.json and what does it describe for MCP client installation?","acceptedAnswer":{"@type":"Answer","text":"clients.json is an open, machine-readable registry describing how each MCP client installs a server: deep-link URL formats, CLI command templates with token slots for env and header flags, config-file root keys and per-OS paths, and connector steps for hosted web clients. It currently covers twenty-six clients, each format verified against vendor docs and validated against a published JSON Schema, and is designed for others to build on freely. anyone tracking fragmented MCP client tooling can follow updates like this via daily.dev."}},{"@type":"Question","name":"How can a remote-only MCP server be installed in a client that only supports stdio?","acceptedAnswer":{"@type":"Answer","text":"The install chooser auto-generates a labeled mcp-remote bridge command for stdio-only clients, so a remote-only server can still be installed even in clients that do not natively support remote MCP connections. This ensures no client is left out of the universal install flow regardless of whether the server is remote or local. developers wiring MCP servers into varied clients can keep up with fixes like this through daily.dev."}}]}
```

