{"slug": "one-click-mcp-install-links-for-cursor-and-vs-code-what-s-actually-in-the-url", "title": "One-click MCP install links for Cursor and VS Code: what's actually in the URL", "summary": "The operator of VibeCodePicks, a directory of AI coding tools, added one-click \"Add to Cursor\" and \"Install in VS Code\" buttons for its remote MCP server by packing the server config into deep links. Cursor's format base64-encodes the config JSON and passes the server name as a query parameter, while VS Code URL-encodes the JSON and requires the name and transport type inside it. The directory's MCP server exposes 13 tools, including search, recommend_tools and compare_tools, over a directory of 114 tools.", "body_md": "I run [VibeCodePicks](https://vibecodepicks.com/?utm_source=devto&utm_medium=social&utm_campaign=mcp-install-links), a directory of AI coding tools (disclosure: it's my site, and it's the example in this post). It has a free remote MCP server, and until today connecting it meant copying a JSON block into a config file. Now the setup page has two buttons, \"Add to Cursor\" and \"Install in VS Code\". Neither one is magic: each is a plain link with the server config packed into the URL. Here's what goes in them, so you can make the same buttons for your own server.\n\nThe server is remote over HTTP and needs no sign-in, so the whole config is one URL:\n\n```\n{ \"url\": \"https://vibecodepicks.com/api/mcp\" }\n```\n\nIf your server runs locally instead, the config would have `command` and `args` the way it does in `mcp.json`. The link formats below take either shape.\n\nCursor's documented format is:\n\n```\ncursor://anysphere.cursor-deeplink/mcp/install?name=$NAME&config=$BASE64_ENCODED_CONFIG\n```\n\n`name` is the server name that shows up in Cursor. `config` is the JSON above, base64-encoded:\n\n```\necho -n '{\"url\":\"https://vibecodepicks.com/api/mcp\"}' | base64\n# eyJ1cmwiOiJodHRwczovL3ZpYmVjb2RlcGlja3MuY29tL2FwaS9tY3AifQ==\n```\n\nSo the button's href is:\n\n```\ncursor://anysphere.cursor-deeplink/mcp/install?name=vibecodepicks&config=eyJ1cmwiOiJodHRwczovL3ZpYmVjb2RlcGlja3MuY29tL2FwaS9tY3AifQ==\n```\n\nOne thing to watch: the config object holds only the server settings. The name goes in the `name` parameter, not inside the JSON.\n\nVS Code's documented format is `vscode:mcp/install?{json-configuration}` (and `vscode-insiders:mcp/install?...` for Insiders). Here the JSON is URL-encoded rather than base64, and the name lives inside it, next to the transport type:\n\n```\n{ \"name\": \"vibecodepicks\", \"type\": \"http\", \"url\": \"https://vibecodepicks.com/api/mcp\" }\n```\n\nIn JavaScript:\n\n``` js\nconst cfg = { name: \"vibecodepicks\", type: \"http\", url: \"https://vibecodepicks.com/api/mcp\" };\nconst href = \"vscode:mcp/install?\" + encodeURIComponent(JSON.stringify(cfg));\n```\n\nwhich gives:\n\n```\nvscode:mcp/install?%7B%22name%22%3A%22vibecodepicks%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fvibecodepicks.com%2Fapi%2Fmcp%22%7D\n```\n\n|  | Cursor | VS Code | \n|---|---|---|\n| Scheme | `cursor://anysphere.cursor-deeplink/mcp/install` | `vscode:mcp/install` | \n| Server name | `name=` query parameter | `\"name\"` inside the JSON | \n| Config encoding | base64 | URL-encoded JSON | \n| Transport | implied by `url` | `\"type\": \"http\"` | \n\nThe mistake that's easy to make is reusing one config for both. The Cursor JSON has no name and no type; the VS Code JSON needs both.\n\nBoth links only do something on a machine that has that editor installed, and other clients (Claude, Claude Code, Codex, Windsurf, ChatGPT) have their own setup steps. So the page keeps the plain config blocks under the buttons. The buttons are a shortcut, not the only way in.\n\nIt searches the directory of 114 tools and exposes 13 MCP tools, including `search`, `recommend_tools`, `compare_tools`, `list_alternatives` and `whats_new`. Once it's connected you can ask your assistant something like \"what's a free open-source coding agent for the terminal?\" and it answers from the directory, with pricing and alternatives.\n\nSetup page with both buttons and the config for every other client: [https://vibecodepicks.com/mcp/?utm_source=devto&utm_medium=social&utm_campaign=mcp-install-links](https://vibecodepicks.com/mcp/?utm_source=devto&utm_medium=social&utm_campaign=mcp-install-links)\n\nFormat references: [Cursor MCP install links](https://cursor.com/docs/context/mcp/install-links) and [VS Code MCP developer guide](https://code.visualstudio.com/api/extension-guides/ai/mcp).", "url": "https://wpnews.pro/news/one-click-mcp-install-links-for-cursor-and-vs-code-what-s-actually-in-the-url", "canonical_source": "https://dev.to/zhi_shen_da3713e5b0a88b00/one-click-mcp-install-links-for-cursor-and-vs-code-whats-actually-in-the-url-2l4d", "published_at": "2026-10-30 13:36:20+00:00", "updated_at": "2026-10-30 13:50:19.581104+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "developer-tools", "ai-tools"], "entities": ["VibeCodePicks", "Cursor", "VS Code", "Anysphere", "Claude", "Codex", "Windsurf", "ChatGPT"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/one-click-mcp-install-links-for-cursor-and-vs-code-what-s-actually-in-the-url", "markdown": "https://wpnews.pro/news/one-click-mcp-install-links-for-cursor-and-vs-code-what-s-actually-in-the-url.md", "text": "https://wpnews.pro/news/one-click-mcp-install-links-for-cursor-and-vs-code-what-s-actually-in-the-url.txt", "jsonld": "https://wpnews.pro/news/one-click-mcp-install-links-for-cursor-and-vs-code-what-s-actually-in-the-url.jsonld"}}