<?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: Ricardo Rodrigues</title>
    <description>The latest articles on DEV Community by Ricardo Rodrigues (@codemalasartes).</description>
    <link>https://dev.to/codemalasartes</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F900488%2Ff2206bfb-c9eb-4f28-be82-666e0114d62e.jpeg</url>
      <title>DEV Community: Ricardo Rodrigues</title>
      <link>https://dev.to/codemalasartes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/codemalasartes"/>
    <language>en</language>
    <item>
      <title>MCPNest — One Month. The Problem, The Solution, Every Feature Explained.</title>
      <dc:creator>Ricardo Rodrigues</dc:creator>
      <pubDate>Tue, 05 May 2026 23:27:57 +0000</pubDate>
      <link>https://dev.to/codemalasartes/mcpnest-one-month-the-problem-the-solution-every-feature-explained-2ad8</link>
      <guid>https://dev.to/codemalasartes/mcpnest-one-month-the-problem-the-solution-every-feature-explained-2ad8</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;The MCP ecosystem is expanding at an extraordinary pace. Anthropic, Microsoft, Google, AWS, and Cloudflare are all publishing official MCP servers. Hundreds of open source servers exist for every conceivable integration. Developers are connecting AI tools — Claude, Cursor, Windsurf — to internal databases, codebases, APIs, and filesystems.&lt;/p&gt;

&lt;p&gt;The infrastructure for doing this exists. The governance layer does not.&lt;/p&gt;

&lt;p&gt;Today, at most engineering teams:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every developer runs MCP servers on their own machine&lt;/li&gt;
&lt;li&gt;There is no central record of what servers are active&lt;/li&gt;
&lt;li&gt;There is no audit trail of what tools were called, by whom, or when&lt;/li&gt;
&lt;li&gt;Credentials — GitHub personal access tokens, database connection strings, API keys — are stored in JSON files on developer laptops&lt;/li&gt;
&lt;li&gt;There is no approval process for which servers developers can use&lt;/li&gt;
&lt;li&gt;There is no isolation — MCP servers run with the full permissions of the local user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the gap MCPNest fills.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Platform
&lt;/h2&gt;

&lt;p&gt;MCPNest is the governance and infrastructure platform for MCP servers. It operates across three layers: a marketplace for discovery, a gateway for control, and a hosted infrastructure layer for isolation and centralisation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Layer 1 — Marketplace
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A searchable catalogue of 7,500+ MCP servers indexed from the official Anthropic registry and GitHub. Every server has a quality score, compatibility matrix, publisher profile, and install configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What problem it solves&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Without a central catalogue, developers find MCP servers through GitHub searches, Reddit posts, and blog articles. There is no quality signal, no verification, no compatibility information. Teams end up with inconsistent tooling and no visibility into what is actually being used.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;7,500+ servers indexed with quality scores and compatibility filters&lt;/li&gt;
&lt;li&gt;One-click install for Cursor and VS Code&lt;/li&gt;
&lt;li&gt;Publisher profiles with verified badges&lt;/li&gt;
&lt;li&gt;Server of the Week editorial picks&lt;/li&gt;
&lt;li&gt;Collections and curated starter packs&lt;/li&gt;
&lt;li&gt;Config Validator — validates syntax, endpoints, and arguments before installation&lt;/li&gt;
&lt;li&gt;MCP Composer — build multi-server configurations and share via link&lt;/li&gt;
&lt;li&gt;Trending servers with weekly install data&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Layer 2 — Gateway
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A single authenticated HTTPS endpoint per workspace. Every developer on the team points their AI client at the same Gateway URL. The Gateway authenticates the request, checks the tool allowlist, proxies to the correct upstream server, and logs the call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What problem it solves&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Without a gateway, every developer maintains their own local configuration. When a server changes, everyone updates manually. There is no central authentication, no audit, and no way to enforce which tools developers can use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Single endpoint per workspace&lt;/strong&gt;&lt;br&gt;
One URL replaces individual configurations across every developer machine. When the admin adds or removes a server, the change is immediate for the entire team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bearer token authentication (SHA-256)&lt;/strong&gt;&lt;br&gt;
Every request is authenticated. Tokens are stored as SHA-256 hashes with timing-safe comparison. No plain text secrets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Per-member tokens&lt;/strong&gt;&lt;br&gt;
Each developer has their own Bearer token. This means every tool call is attributable to a specific individual, not just to the workspace. Tokens can be revoked instantly for any member without affecting the rest of the team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tool allowlists per member&lt;/strong&gt;&lt;br&gt;
Admins define which tools each developer can call at the protocol level. A developer with access to the GitHub MCP server can be restricted to specific tools — for example, read-only operations only. Workspace-wide enforcement toggle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full audit log per tool call&lt;/strong&gt;&lt;br&gt;
Every call is logged with: workspace ID, member ID, server, tool name, HTTP status, latency, timestamp, and error code where applicable. No inputs or outputs are stored — only metadata. GDPR safe by design. Logs are exportable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tool namespacing&lt;/strong&gt;&lt;br&gt;
Automatic conflict resolution when multiple servers expose tools with the same name. No manual configuration required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Workspace RBAC&lt;/strong&gt;&lt;br&gt;
Three roles: Owner, Admin, Member. Only Admins can approve servers for the workspace. Separation of duties between team management and tool usage.&lt;/p&gt;




&lt;h2&gt;
  
  
  Layer 3 — Hosted Infrastructure
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MCP servers running in isolated Docker containers on central infrastructure, managed by the MCPNest Orchestrator. Developers deploy servers from a catalogue via the workspace dashboard. The AI client connects to the Gateway, which proxies to the hosted container.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What problem it solves&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Running MCP servers locally means no isolation, no central credential management, no shared infrastructure, and no visibility into what is actually running. When a developer's laptop is lost or stolen, every credential in every local config file is exposed. When a developer leaves the company, there is no clean offboarding process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;12 verified servers available for one-click deploy&lt;/strong&gt;&lt;br&gt;
Filesystem, GitHub, PostgreSQL, Notion, Context7, Slack, SQLite, Brave Search, Puppeteer, Memory, Sequential Thinking, Everything. All pre-validated and running on the MCPNest Bridge image.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Container isolation&lt;/strong&gt;&lt;br&gt;
Every container runs with: cap_drop ALL (zero Linux capabilities), no-new-privileges flag, CPU and memory resource limits enforced, dedicated Docker network per workspace.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Credential management&lt;/strong&gt;&lt;br&gt;
Servers that require credentials — GitHub personal access tokens, database connection strings, Slack bot tokens, API keys — prompt for them via a modal before deploy. Credentials are encrypted and never logged. Developers never see or store them locally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-time deploy console&lt;/strong&gt;&lt;br&gt;
A terminal modal streams container logs during startup. The system auto-detects RUNNING + HEALTHY state and closes automatically. No manual refresh required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Per-instance log viewer&lt;/strong&gt;&lt;br&gt;
Every running instance has a Logs button that shows the last 50 lines of container output. Debugging without SSH access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Terminate with cleanup&lt;/strong&gt;&lt;br&gt;
Stopping a server removes the container and cleans the database record. No orphaned containers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP Bridge&lt;/strong&gt;&lt;br&gt;
A stdio-to-HTTP adapter that wraps any npx-based MCP server into an HTTP endpoint compatible with the Gateway. Enables hosting of any MCP server without modifying its source.&lt;/p&gt;




&lt;h2&gt;
  
  
  Security and Compliance
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Infrastructure&lt;/strong&gt;&lt;br&gt;
All infrastructure is EU-based. Supabase (Frankfurt) for the database. Hetzner (Nuremberg) for the orchestrator and hosted containers. Vercel edge network for the application layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Token security&lt;/strong&gt;&lt;br&gt;
Bearer tokens are stored as SHA-256 hashes. Timing-safe comparison on every request. Per-member tokens enable individual audit trails and instant revocation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data handling&lt;/strong&gt;&lt;br&gt;
No inputs or outputs from tool calls are stored. Only metadata is logged (who, when, which tool, what status). GDPR safe by design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Container security&lt;/strong&gt;&lt;br&gt;
cap_drop ALL removes all Linux capabilities from containers. no-new-privileges prevents privilege escalation. Resource limits prevent noisy neighbour and runaway processes. Dedicated Docker network per workspace.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-host&lt;/strong&gt;&lt;br&gt;
The full MCPNest stack is available for self-hosted deployment via Docker for teams that require on-premise infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Result
&lt;/h2&gt;

&lt;p&gt;One month. 14 versions shipped. 7,500+ MCP servers indexed. Enterprise Gateway live. 12 hosted servers operational. Partnerships with Grafana, RailPush, and Context7 confirmed.&lt;/p&gt;

&lt;p&gt;The MCP ecosystem needed a governance layer. MCPNest is it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;mcpnest.io&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx75mo5p2m6p3ninmqz3o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx75mo5p2m6p3ninmqz3o.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>claude</category>
      <category>openai</category>
    </item>
    <item>
      <title>Hosting MCP Servers at Scale: The Orchestrator</title>
      <dc:creator>Ricardo Rodrigues</dc:creator>
      <pubDate>Wed, 29 Apr 2026 20:39:35 +0000</pubDate>
      <link>https://dev.to/codemalasartes/hosting-mcp-servers-at-scale-the-orchestrator-517o</link>
      <guid>https://dev.to/codemalasartes/hosting-mcp-servers-at-scale-the-orchestrator-517o</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fadnaa4tyqdj8x2viqkcz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fadnaa4tyqdj8x2viqkcz.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;How MCPNest deploys isolated Docker containers for MCP servers and routes tool calls intelligently across your workspace.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;MCP servers have a deployment problem.&lt;/p&gt;

&lt;p&gt;Most servers are stdio-based — they run as a subprocess via &lt;code&gt;npx&lt;/code&gt; and communicate over stdin/stdout. That works fine on a developer's laptop. It does not work for a team.&lt;/p&gt;

&lt;p&gt;You cannot share a stdio process across machines. You cannot health-check it remotely. You cannot restart it when it crashes without someone noticing. You cannot give five engineers access to the same instance running on one person's laptop.&lt;/p&gt;

&lt;p&gt;The standard solution is to wrap stdio servers in an HTTP adapter and deploy them to a server. The problem: that is significant infrastructure work for every MCP server you want to use. Dockerfile, networking, health checks, restart policies, resource limits — multiply that by every server your team needs.&lt;/p&gt;

&lt;p&gt;We built MCPNest Hosted Servers to handle all of it.&lt;/p&gt;




&lt;h2&gt;
  
  
  How hosted MCP servers work
&lt;/h2&gt;

&lt;p&gt;When you click Deploy in your workspace Hosted tab, MCPNest:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Creates an instance record in the database (&lt;code&gt;status: pending&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Sends a deploy request to the MCPNest Orchestrator service&lt;/li&gt;
&lt;li&gt;Orchestrator pulls the verified image from our allowlist&lt;/li&gt;
&lt;li&gt;Orchestrator starts the container with security hardening applied&lt;/li&gt;
&lt;li&gt;Orchestrator polls health until the container responds&lt;/li&gt;
&lt;li&gt;Updates the instance to &lt;code&gt;status: running, health_status: healthy&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The server automatically appears in your Gateway &lt;code&gt;tools/list&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Total time measured in production today: &lt;strong&gt;6 seconds from click to RUNNING + HEALTHY&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Bridge layer
&lt;/h2&gt;

&lt;p&gt;Inside each hosted container runs MCPNest Bridge — a FastAPI server on port 8080 that translates between HTTP (external) and stdio JSON-RPC (internal).&lt;/p&gt;

&lt;p&gt;Bridge handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MCP protocol handshake (&lt;code&gt;initialize&lt;/code&gt; → &lt;code&gt;notifications/initialized&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Managing the stdio subprocess lifecycle&lt;/li&gt;
&lt;li&gt;Translating &lt;code&gt;POST /tools/list&lt;/code&gt; → &lt;code&gt;tools/list&lt;/code&gt; JSON-RPC request → response&lt;/li&gt;
&lt;li&gt;Translating &lt;code&gt;POST /tools/call&lt;/code&gt; → &lt;code&gt;tools/call&lt;/code&gt; JSON-RPC request → response&lt;/li&gt;
&lt;li&gt;Draining stderr in the background so it never blocks the main process&lt;/li&gt;
&lt;li&gt;asyncio.Lock per request to prevent concurrent stdio corruption&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The subprocess command is configurable per image via the &lt;code&gt;mcp_allowed_images&lt;/code&gt; table. For &lt;code&gt;node:20-alpine&lt;/code&gt; with &lt;code&gt;@modelcontextprotocol/server-filesystem&lt;/code&gt;, the command is &lt;code&gt;npx -y @modelcontextprotocol/server-filesystem /workspace&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Security model
&lt;/h2&gt;

&lt;p&gt;Every container runs with these constraints — no exceptions, not configurable by the user:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Process isolation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;no-new-privileges: true&lt;/code&gt; — no privilege escalation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cap_drop: ALL&lt;/code&gt; — all Linux capabilities dropped&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cap_add: [CHOWN, SETUID, SETGID]&lt;/code&gt; — only minimum needed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Network isolation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Containers bind to &lt;code&gt;127.0.0.1&lt;/code&gt; only — never exposed on a public interface&lt;/li&gt;
&lt;li&gt;Traffic flows: Gateway → Orchestrator → container (all internal)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Filesystem:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/tmp&lt;/code&gt; mounted as tmpfs with &lt;code&gt;noexec, nosuid, nodev&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;No host filesystem mounts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Resources:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU and memory caps enforced at container creation by plan profile&lt;/li&gt;
&lt;li&gt;Small: 0.25 vCPU, 256 MB RAM&lt;/li&gt;
&lt;li&gt;Medium: 0.5 vCPU, 512 MB RAM&lt;/li&gt;
&lt;li&gt;Large: 1.0 vCPU, 1 GB RAM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Image allowlist:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only MCPNest-verified images can be deployed&lt;/li&gt;
&lt;li&gt;Images are validated against a regex pattern before pull&lt;/li&gt;
&lt;li&gt;The DB allowlist is the primary gate; the regex is defence-in-depth&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Orchestrator
&lt;/h2&gt;

&lt;p&gt;Above the containers sits the MCPNest Orchestrator — a FastAPI service that aggregates tools from all running instances in a workspace and routes tool calls to the correct container.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;tools/list aggregation:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When your Gateway receives a &lt;code&gt;tools/list&lt;/code&gt; request and &lt;code&gt;orchestrator_enabled&lt;/code&gt; is true, it calls the Orchestrator. The Orchestrator:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Queries the database for all running instances in the workspace&lt;/li&gt;
&lt;li&gt;Fans out &lt;code&gt;POST /tools/list&lt;/code&gt; to each container in parallel&lt;/li&gt;
&lt;li&gt;Collects results, detects naming conflicts&lt;/li&gt;
&lt;li&gt;Applies namespacing: if two servers expose a tool called &lt;code&gt;query&lt;/code&gt;, they become &lt;code&gt;postgres_mcp__query&lt;/code&gt; and &lt;code&gt;mysql_mcp__query&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Caches the result for 30 seconds&lt;/li&gt;
&lt;li&gt;Returns a unified tool list&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;tools/call routing:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When a &lt;code&gt;tools/call&lt;/code&gt; arrives, the Orchestrator:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Finds the ToolInfo record for the requested tool name (from cache)&lt;/li&gt;
&lt;li&gt;Looks up the live endpoint URL from the database&lt;/li&gt;
&lt;li&gt;Strips the namespace prefix if present (&lt;code&gt;postgres_mcp__query&lt;/code&gt; → &lt;code&gt;query&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Forwards the call to the correct container&lt;/li&gt;
&lt;li&gt;Logs the call to &lt;code&gt;mcp_tool_calls&lt;/code&gt; (best-effort, non-blocking)&lt;/li&gt;
&lt;li&gt;Returns the result&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Fallback behaviour:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the Orchestrator is unreachable, or if a workspace has no running hosted instances, the Gateway automatically falls back to direct fan-out to remote HTTP servers. No downtime. No manual intervention.&lt;/p&gt;




&lt;h2&gt;
  
  
  Current state
&lt;/h2&gt;

&lt;p&gt;Three verified images are available today:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Server&lt;/th&gt;
&lt;th&gt;Image&lt;/th&gt;
&lt;th&gt;Tools&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;filesystem-mcp&lt;/td&gt;
&lt;td&gt;node:20-alpine + @modelcontextprotocol/server-filesystem&lt;/td&gt;
&lt;td&gt;read_file, write_file, list_directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;github-mcp&lt;/td&gt;
&lt;td&gt;ghcr.io/modelcontextprotocol/servers:github&lt;/td&gt;
&lt;td&gt;create_issue, list_prs, search_code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;postgres-mcp&lt;/td&gt;
&lt;td&gt;ghcr.io/modelcontextprotocol/servers:postgres&lt;/td&gt;
&lt;td&gt;query, list_tables, describe_table&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Plan limits: Team plan supports 3 running instances per workspace. Enterprise supports 20.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Auth headers per server (bring your own API keys — fixes degraded status on auth-required servers)&lt;/li&gt;
&lt;li&gt;More verified images: Slack, Notion, Linear&lt;/li&gt;
&lt;li&gt;Usage metering per instance for billing&lt;/li&gt;
&lt;li&gt;Auto-deploy via workspace registry URL (&lt;code&gt;mcpnest-registry-client&lt;/code&gt; npm package)&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Ricardo Rodrigues — Platform Engineer @ BCP, Founder @ MCPNest&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Porto, Portugal&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCPNest — The App Store for MCP Servers&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://mcpnest.io/workspace" rel="noopener noreferrer"&gt;mcpnest.io/workspace&lt;/a&gt; → Hosted tab&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>claude</category>
      <category>cursor</category>
    </item>
    <item>
      <title>Enterprise MCP Governance: Gateway + Layer 2</title>
      <dc:creator>Ricardo Rodrigues</dc:creator>
      <pubDate>Wed, 29 Apr 2026 20:38:30 +0000</pubDate>
      <link>https://dev.to/codemalasartes/enterprise-mcp-governance-gateway-layer-2-18ea</link>
      <guid>https://dev.to/codemalasartes/enterprise-mcp-governance-gateway-layer-2-18ea</guid>
      <description>&lt;p&gt;&lt;em&gt;One endpoint. Per-member tokens. Full audit trail. How MCPNest solves the team coordination problem for MCP.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;When a team of engineers all use Claude with MCP servers, you have a coordination problem.&lt;/p&gt;

&lt;p&gt;Each person runs their own &lt;code&gt;npx&lt;/code&gt; command. Each person has their own &lt;code&gt;claude_desktop_config.json&lt;/code&gt;. When a server URL changes, someone has to update every config. There is no audit trail. No access control. No way to know who called what tool, when, and with what arguments.&lt;/p&gt;

&lt;p&gt;This is the current state of enterprise MCP usage in 2026. We built two layers to fix it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Layer 1: The Gateway
&lt;/h2&gt;

&lt;p&gt;MCPNest Gateway gives every workspace a single endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://mcpnest.io/api/gw/{workspace-slug}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Behind that endpoint: all the MCP servers your team has approved. One Bearer token. All tools. Every call proxied and logged.&lt;/p&gt;

&lt;p&gt;The Gateway speaks JSON-RPC 2.0 — the MCP standard. Claude, Cursor, and Windsurf connect to it exactly as they would to any MCP server. Your team updates one config file once. When you add or remove a server from your workspace, every connected client sees the change automatically on the next &lt;code&gt;tools/list&lt;/code&gt; call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical implementation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Token format: &lt;code&gt;mng_&lt;/code&gt; prefix + 48 hex characters (192 bits of entropy)&lt;/li&gt;
&lt;li&gt;Storage: SHA-256 hash only — the raw token is never stored in plaintext&lt;/li&gt;
&lt;li&gt;Verification: &lt;code&gt;timingSafeEqual()&lt;/code&gt; to prevent timing side-channel attacks&lt;/li&gt;
&lt;li&gt;Rate limiting: 200 requests per minute per IP per workspace slug&lt;/li&gt;
&lt;li&gt;SSE support: streaming responses for MCP servers that use Server-Sent Events&lt;/li&gt;
&lt;li&gt;Tool prefix: configurable per server to avoid naming conflicts (&lt;code&gt;github_create_issue&lt;/code&gt; vs &lt;code&gt;gitlab_create_issue&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Layer 2: Per-Member Access Control
&lt;/h2&gt;

&lt;p&gt;The workspace token is admin-level — full access to all tools. For team members, you create individual Bearer tokens with the same format but different scope.&lt;/p&gt;

&lt;p&gt;Each member token can have an allowlist: &lt;code&gt;server_slug : tool_name&lt;/code&gt; pairs that define exactly which tools the member can call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Owner creates a member token in the workspace Security tab&lt;/li&gt;
&lt;li&gt;Owner defines allowlist rules: &lt;code&gt;github-mcp:list_issues&lt;/code&gt;, &lt;code&gt;grafana:get_dashboard&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Owner enables enforcement&lt;/li&gt;
&lt;li&gt;Member uses their token — Gateway checks allowlist on every &lt;code&gt;tools/call&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Blocked calls return error code &lt;code&gt;-32003: Tool not allowed for this user&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Every call is logged with user identity to the audit trail&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The rule logic:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No rules defined: member has full access (open by default)&lt;/li&gt;
&lt;li&gt;Rules defined + enforcement on: member can only call listed tools&lt;/li&gt;
&lt;li&gt;Workspace admin token: always full access regardless of allowlist&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What this looks like in practice
&lt;/h2&gt;

&lt;p&gt;A DevOps team has three MCP servers in their workspace: GitHub, Grafana, and a custom internal deployment server.&lt;/p&gt;

&lt;p&gt;Junior engineers get member tokens with allowlists restricted to read-only operations: &lt;code&gt;github-mcp:list_issues&lt;/code&gt;, &lt;code&gt;grafana:get_dashboard&lt;/code&gt;. They can query and report but not write.&lt;/p&gt;

&lt;p&gt;Senior engineers get tokens with no allowlist restrictions. The deployment server is restricted to the team lead and the CI system.&lt;/p&gt;

&lt;p&gt;All of this configured in the workspace UI. No code changes. No config files to distribute to each team member.&lt;/p&gt;




&lt;h2&gt;
  
  
  The audit log
&lt;/h2&gt;

&lt;p&gt;Every action in a workspace is logged: server added, member invited, tool called, health check run. For tool calls, the log records which user (by member token identity), which server, which tool, and the response latency.&lt;/p&gt;

&lt;p&gt;This is the audit trail your security team asks for. It exists out of the box.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Ricardo Rodrigues — Platform Engineer @ BCP, Founder @ MCPNest&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Porto, Portugal&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCPNest — The App Store for MCP Servers&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://mcpnest.io/workspace" rel="noopener noreferrer"&gt;mcpnest.io/workspace&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>claude</category>
      <category>cursor</category>
    </item>
    <item>
      <title>The MCP Discovery Problem</title>
      <dc:creator>Ricardo Rodrigues</dc:creator>
      <pubDate>Wed, 29 Apr 2026 20:29:01 +0000</pubDate>
      <link>https://dev.to/codemalasartes/the-mcp-discovery-problem-3map</link>
      <guid>https://dev.to/codemalasartes/the-mcp-discovery-problem-3map</guid>
      <description>&lt;p&gt;In November 2024, Anthropic released the Model Context Protocol — &lt;br&gt;
a standard that lets AI agents call external tools. Within months, &lt;br&gt;
hundreds of MCP servers appeared on GitHub. Stripe, Grafana, &lt;br&gt;
Cloudflare, AWS — all publishing official servers.&lt;/p&gt;

&lt;p&gt;The problem: there was nowhere to find them.&lt;/p&gt;

&lt;p&gt;Developers were digging through GitHub search, Reddit threads, &lt;br&gt;
and scattered READMEs to find servers that might already exist. &lt;br&gt;
The official Anthropic registry had an API but no UI. &lt;br&gt;
The most starred community lists had tens of thousands of &lt;br&gt;
GitHub stars but weren't searchable or filterable.&lt;/p&gt;

&lt;p&gt;This is the npm problem from 2012. A growing ecosystem &lt;br&gt;
with no discovery layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we built
&lt;/h2&gt;

&lt;p&gt;MCPNest indexes MCP servers from the official Anthropic registry &lt;br&gt;
and GitHub. 7,554 servers as of today, with quality scores, &lt;br&gt;
install counts, compatibility flags per client, and one-click &lt;br&gt;
install configs for Claude Desktop, Cursor, VS Code, and Windsurf.&lt;/p&gt;

&lt;p&gt;Every server page renders the GitHub README, shows the install &lt;br&gt;
config for each client, and tracks installs via a copy button &lt;br&gt;
that increments a counter in Supabase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quality scoring
&lt;/h2&gt;

&lt;p&gt;Not all MCP servers are equal. We score each server 0-100 based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Has a valid install config&lt;/li&gt;
&lt;li&gt;Has a description&lt;/li&gt;
&lt;li&gt;Is verified from the official registry&lt;/li&gt;
&lt;li&gt;GitHub stars&lt;/li&gt;
&lt;li&gt;Install count&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The score maps to an A-F grade shown on each server card.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this doesn't solve
&lt;/h2&gt;

&lt;p&gt;Discovery is the easy part. Finding a server is step one. &lt;br&gt;
The harder problems are: running it reliably, giving your team &lt;br&gt;
access to it securely, and managing it at scale.&lt;/p&gt;

&lt;p&gt;That's what we built next.&lt;/p&gt;

&lt;p&gt;→ mcpnest.io&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe46pib9wymkd5z7g2ub8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe46pib9wymkd5z7g2ub8.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>mcp</category>
      <category>tooling</category>
    </item>
    <item>
      <title>The MCP Discovery Problem: Why 7,500+ Servers Is Both a Victory and a Warning</title>
      <dc:creator>Ricardo Rodrigues</dc:creator>
      <pubDate>Thu, 23 Apr 2026 16:38:33 +0000</pubDate>
      <link>https://dev.to/codemalasartes/the-mcp-discovery-problem-why-7500-servers-is-both-a-victory-and-a-warning-3joe</link>
      <guid>https://dev.to/codemalasartes/the-mcp-discovery-problem-why-7500-servers-is-both-a-victory-and-a-warning-3joe</guid>
      <description>&lt;p&gt;&lt;em&gt;The ecosystem is growing. But finding the right server is getting harder, not easier.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;There is a number that gets thrown around a lot in the MCP ecosystem right now: 20000+.&lt;/p&gt;

&lt;p&gt;That is roughly how many MCP servers exist as of April 2026. It is an impressive number. A year ago, there were a few dozen. The growth curve looks exactly like npm circa 2012–2015 — exponential, messy, and full of potential.&lt;/p&gt;

&lt;p&gt;But there is a problem nobody is talking about loudly enough.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The discovery problem did not get smaller when the ecosystem grew. It got bigger.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  From "does it exist?" to "which one doesn't break in production?"
&lt;/h2&gt;

&lt;p&gt;In early 2025, the question developers asked was simple: &lt;em&gt;is there an MCP server for Postgres? For Slack? For GitHub?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The answer was usually no, or "sort of, check this GitHub repo."&lt;/p&gt;

&lt;p&gt;By April 2026, the answer to almost every "is there an MCP for X?" question is yes — often with four to eight options. The new question is harder: &lt;em&gt;which one is maintained? Which one has an install config that actually works? Which one is still actively developed?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A developer covering the MCP ecosystem at miaoquai.com framed this shift better than I have seen anywhere else — paraphrasing from the original Chinese: users are no longer asking whether an MCP server exists for something. They are asking which one is actually good. That move, from "does it exist?" to "which one is trustworthy?", is how you know an ecosystem is maturing.&lt;/p&gt;

&lt;p&gt;This is the shift from scarcity to noise. And it is the hardest phase of any ecosystem to navigate.&lt;/p&gt;




&lt;h2&gt;
  
  
  The signal problem
&lt;/h2&gt;

&lt;p&gt;When developers browse the 7,561 servers indexed at MCPNest, the most common question is not "is there a server for X?" — it is "which of these four options for X should I actually use?"&lt;/p&gt;

&lt;p&gt;The default answer most people fall back on is GitHub stars. Stars are visible, comparable, and familiar. The problem is that stars measure historical interest. They tell you how many people were excited about a server at some point in the past. They tell you very little about whether it will work today.&lt;/p&gt;

&lt;p&gt;A server can accumulate thousands of stars and then go unmaintained. The stars stay. The maintenance does not.&lt;/p&gt;




&lt;h2&gt;
  
  
  What quality actually means for an MCP server
&lt;/h2&gt;

&lt;p&gt;We built a Quality Score (A–F) for every server in the MCPNest registry. Not because scores are fun — but because without a better signal, developers keep defaulting to star counts.&lt;/p&gt;

&lt;p&gt;The factors we look at:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maintenance velocity.&lt;/strong&gt; When was the last commit? A server updated two weeks ago is categorically different from one updated six months ago, even if the code looks identical.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Config completeness.&lt;/strong&gt; Does the server have a working install config for Claude Desktop, Cursor, or VS Code? A server without a valid install config is not really usable by most developers, regardless of what the README says.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verification status.&lt;/strong&gt; Is it listed in the official Anthropic registry? Not a quality guarantee, but a meaningful baseline signal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Documentation depth.&lt;/strong&gt; Does the README explain what the server actually does, what tools it exposes, and what credentials it needs?&lt;/p&gt;

&lt;p&gt;The principle is simple: a well-maintained server with 300 stars should score higher than an abandoned one with 3,000. That is what we are trying to make visible.&lt;/p&gt;




&lt;h2&gt;
  
  
  The npm parallel
&lt;/h2&gt;

&lt;p&gt;npm crossed 100,000 packages in 2015. The JavaScript community went through a long reckoning about package quality, maintenance, and trust — left-pad, node_modules bloat, abandoned dependencies pulling production apps down with them.&lt;/p&gt;

&lt;p&gt;The MCP ecosystem is smaller and moving faster. A similar reckoning will happen. The question is whether the tooling to handle it gets built proactively or reactively.&lt;/p&gt;




&lt;h2&gt;
  
  
  What comes next
&lt;/h2&gt;

&lt;p&gt;Quality scoring is a start, but it is a static snapshot. What matters more is dynamic health — knowing when a server you depend on stops being maintained, or when a previously low-scoring server improves significantly.&lt;/p&gt;

&lt;p&gt;The goal is not to gatekeep the ecosystem. Every server deserves to be discoverable. The goal is to give developers the context to make informed decisions quickly, so they spend less time debugging abandoned configs and more time building.&lt;/p&gt;

&lt;p&gt;7,561 servers indexed is a milestone. But the milestone that actually matters is: how many of those are good, maintained, and ready to use today?&lt;/p&gt;

&lt;p&gt;That is the number we are working on making transparent.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;MCPNest (mcpnest.io) is a marketplace for MCP servers with Quality Scores, one-click install for Claude, Cursor, Windsurf and VS Code, and an enterprise Gateway for teams.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>mcp</category>
      <category>tooling</category>
    </item>
    <item>
      <title>MCPNest Gateway — One URL to Rule All Your MCP Servers</title>
      <dc:creator>Ricardo Rodrigues</dc:creator>
      <pubDate>Wed, 22 Apr 2026 13:35:55 +0000</pubDate>
      <link>https://dev.to/codemalasartes/mcpnest-gateway-one-url-to-rule-all-your-mcp-servers-3ekn</link>
      <guid>https://dev.to/codemalasartes/mcpnest-gateway-one-url-to-rule-all-your-mcp-servers-3ekn</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsx8yp1dmldyay0u7s9du.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsx8yp1dmldyay0u7s9du.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;MCPNest v1.11 | April 2026&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;The MCP ecosystem has a governance problem.&lt;/p&gt;

&lt;p&gt;Developers are installing MCP servers directly into Claude Desktop and Cursor — GitHub integrations, database connectors, web scrapers, API wrappers. The tools are good. The problem is that nobody in IT knows which ones are running, who installed them, or what they're doing.&lt;/p&gt;

&lt;p&gt;This is the problem the MCPNest Gateway solves.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem With How Teams Use MCP Today
&lt;/h2&gt;

&lt;p&gt;When a developer wants to add an MCP server to their Claude Desktop setup, they edit a JSON file:&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;"github"&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;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&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="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@modelcontextprotocol/server-github"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&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;"GITHUB_TOKEN"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ghp_..."&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;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;This works fine for one developer. It falls apart for a team.&lt;/p&gt;

&lt;p&gt;There is no central list of which servers are approved. No versioning — if a server updates and breaks something, there is no rollback. No audit trail — if Claude connects to an external system and something goes wrong, there is no record of what happened. And no access control — any developer can add any server without approval.&lt;/p&gt;

&lt;p&gt;For individual developers, none of this matters. For a team of 20 at a company that cares about security, it is a governance gap.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the Gateway Does
&lt;/h2&gt;

&lt;p&gt;The MCPNest Gateway gives each Enterprise workspace a single authenticated endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;https://mcpnest.io/api/gw/{workspace-slug}
Authorization: Bearer mng_...
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of each developer maintaining their own JSON config with multiple servers, they point Claude Desktop or Cursor at this one URL. The Gateway handles everything else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;tools/list&lt;/strong&gt; — When Claude asks what tools are available, the Gateway calls &lt;code&gt;tools/list&lt;/code&gt; on every server approved in the workspace, aggregates the results, and returns a unified list. From Claude's perspective, it is talking to one server. Behind the scenes, it might be five.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;tools/call&lt;/strong&gt; — When Claude calls a tool, the Gateway identifies which server owns that tool and proxies the request. The developer does not need to configure anything. The routing is automatic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Logging&lt;/strong&gt; — Every tool call is logged at the protocol level: which tool was called, on which server, with what status code, and how long it took. No input or output content is stored — only metadata. GDPR-safe by design.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;

&lt;p&gt;The Gateway is built on three files.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;auth.ts&lt;/code&gt; handles token verification. Bearer tokens are stored as SHA-256 hashes — never in plaintext. Comparison uses &lt;code&gt;timingSafeEqual&lt;/code&gt; to prevent timing attacks. Tokens use a &lt;code&gt;mng_&lt;/code&gt; prefix so they are immediately recognisable in logs and distinguishable from other API tokens.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;logging.ts&lt;/code&gt; handles fire-and-forget writes to &lt;code&gt;mcp_tool_calls&lt;/code&gt;. If the table does not exist or the write fails, the proxy continues — logging never blocks a tool call.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;route.ts&lt;/code&gt; handles the actual proxying. It resolves the workspace, verifies the token, parses the JSON-RPC body, fetches tools from each upstream server, and routes calls to the correct endpoint. It supports both JSON and SSE transport — auto-detecting from the response &lt;code&gt;content-type&lt;/code&gt; header — because different MCP servers use different transports.&lt;/p&gt;

&lt;p&gt;The database schema is straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;gateway_workspaces&lt;/code&gt; — one row per workspace, with the token hash and plan&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gateway_workspace_servers&lt;/code&gt; — which servers each workspace exposes, with position ordering and optional tool prefix to avoid name collisions&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mcp_tool_calls&lt;/code&gt; — append-only log of every tool call, retained for 90 days&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What Gets Logged
&lt;/h2&gt;

&lt;p&gt;Each row in &lt;code&gt;mcp_tool_calls&lt;/code&gt; contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;workspace_id&lt;/code&gt; — which workspace made the call&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;server_slug&lt;/code&gt; — which upstream server handled it&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tool_name&lt;/code&gt; — which tool was called&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;status&lt;/code&gt; — HTTP-style status code (200 for success, 4xx for client errors, 5xx for upstream errors)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;latency_ms&lt;/code&gt; — how long the round trip took&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;created_at&lt;/code&gt; — timestamp&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing from the input parameters or output content is stored. The log answers "what happened" without storing "what was said."&lt;/p&gt;




&lt;h2&gt;
  
  
  A Real Test
&lt;/h2&gt;

&lt;p&gt;After deploying, I tested with a workspace containing the Context7 MCP server (documentation lookup) at &lt;code&gt;https://mcp.context7.com/mcp&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://mcpnest.io/api/gw/bcp-test &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer mng_..."&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Response:&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;"jsonrpc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"result"&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;"tools"&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;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"resolve-library-id"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"query-docs"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;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;Two tools returned, proxied through the Gateway, logged in &lt;code&gt;mcp_tool_calls&lt;/code&gt;. Latency around 1000ms — the Gateway adds minimal overhead on top of the upstream server response time.&lt;/p&gt;

&lt;p&gt;The Supabase log confirmed 5 calls, all status 200, latencies between 821ms and 1440ms.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Means for Enterprise Teams
&lt;/h2&gt;

&lt;p&gt;The question most IT teams ask when developers start using AI tools is: "What is Claude actually connecting to?"&lt;/p&gt;

&lt;p&gt;Without the Gateway, the answer is "we don't know." Each developer has their own config. Servers come and go. There is no central record.&lt;/p&gt;

&lt;p&gt;With the Gateway, the answer is: every tool call is in &lt;code&gt;mcp_tool_calls&lt;/code&gt;. IT controls which servers are in the workspace. Developers cannot add servers without admin approval. Every action has a timestamp and an owner.&lt;/p&gt;

&lt;p&gt;It is the same principle as an API gateway like Kong or AWS API Gateway, applied to the MCP protocol.&lt;/p&gt;




&lt;h2&gt;
  
  
  Current Limitations
&lt;/h2&gt;

&lt;p&gt;The Gateway v0 works with MCP servers that have a remote HTTP endpoint. Local servers — those that run via &lt;code&gt;npx&lt;/code&gt; or &lt;code&gt;node&lt;/code&gt; on the developer's machine — cannot be proxied because they have no public endpoint to route to. This covers a significant portion of the MCP ecosystem today.&lt;/p&gt;

&lt;p&gt;Servers that require authentication (like RailPush, which needs a Bearer token) need their credentials configured in the workspace &lt;code&gt;config_override&lt;/code&gt;. There is no UI for this yet — it requires a direct database insert.&lt;/p&gt;

&lt;p&gt;There is also no workspace creation UI yet. Workspaces are created via SQL. This is the next thing to build.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Comes Next
&lt;/h2&gt;

&lt;p&gt;The immediate next step is a workspace creation UI — a page where Enterprise users can create a workspace, add servers, generate a Bearer token, and copy the Gateway URL. Right now all of this requires direct database access.&lt;/p&gt;

&lt;p&gt;After that: token rotation UI, per-server health status in the Gateway response, and rate limiting per workspace.&lt;/p&gt;

&lt;p&gt;The longer-term goal is making the Gateway the standard way teams distribute MCP server access — the same way Artifactory or a private npm registry distributes packages, but for MCP servers.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;MCPNest is a marketplace and governance layer for MCP servers. 7,561+ servers indexed. Gateway live since April 20, 2026. Free to use at mcpnest.io — Enterprise for teams.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; MCP, Model Context Protocol, TypeScript, Claude, Enterprise AI, API Gateway, Developer Tools&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>claude</category>
      <category>cursor</category>
    </item>
    <item>
      <title>The MCP Generator — Scaffold a Working MCP Server in 60 Seconds With Plain English</title>
      <dc:creator>Ricardo Rodrigues</dc:creator>
      <pubDate>Mon, 20 Apr 2026 11:00:11 +0000</pubDate>
      <link>https://dev.to/codemalasartes/the-mcp-generator-scaffold-a-working-mcp-server-in-60-seconds-with-plain-english-58a6</link>
      <guid>https://dev.to/codemalasartes/the-mcp-generator-scaffold-a-working-mcp-server-in-60-seconds-with-plain-english-58a6</guid>
      <description>&lt;p&gt;&lt;em&gt;Published on MCPNest Blog | April 2026&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Most developers who want a custom MCP server don't build one.&lt;/p&gt;

&lt;p&gt;Not because they can't. Because starting is hard.&lt;/p&gt;

&lt;p&gt;Where do you begin? Which SDK version? What's the right file structure? How do you register tools correctly? How do you handle errors? What does &lt;code&gt;claude_desktop_config.json&lt;/code&gt; need to say to load the server?&lt;/p&gt;

&lt;p&gt;These questions cost time. A developer unfamiliar with the MCP SDK typically spends 2-4 hours on setup before writing a single line of actual tool logic. For a solo developer or a platform engineer who already has a full day job, that's the entire Sunday afternoon gone before anything useful runs.&lt;/p&gt;

&lt;p&gt;The barrier to publishing an MCP server is high. The MCP Generator lowers it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What It Does
&lt;/h2&gt;

&lt;p&gt;The MCP Generator takes a plain English description — up to 500 characters — and returns a complete MCP server scaffold in TypeScript. What would take 2-4 hours reading SDK documentation takes 30 seconds.&lt;/p&gt;

&lt;p&gt;You describe what you want. The Generator builds the structure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input examples:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"A server that fetches real-time weather for any city"&lt;/li&gt;
&lt;li&gt;"An MCP server that queries a Postgres database and lists tables"&lt;/li&gt;
&lt;li&gt;"A server that reads and writes files in a local directory"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt; A JSON object with four fields:&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;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"weather-mcp-server"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fetches real-time weather data for any city using the OpenWeather API"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"// Complete TypeScript MCP server code..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"install"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{ &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;mcpServers&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: { &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;weather-mcp-server&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: { &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;command&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;npx&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;, &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;args&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: [&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;-y&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;, &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;weather-mcp-server&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&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;The &lt;code&gt;code&lt;/code&gt; field is a complete TypeScript file — tool registration, request handlers, error handling, and the correct SDK boilerplate. The &lt;code&gt;install&lt;/code&gt; field is the config snippet ready to paste into &lt;code&gt;claude_desktop_config.json&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;TypeScript always. Not JavaScript. The MCP SDK is TypeScript-first and the Generator follows that convention.&lt;/p&gt;




&lt;h2&gt;
  
  
  How It Works Under the Hood
&lt;/h2&gt;

&lt;p&gt;The Generator calls the Anthropic API directly — &lt;code&gt;/v1/messages&lt;/code&gt; with Claude Haiku. A specialised system prompt instructs the model to generate MCP servers that follow the correct SDK conventions, register tools with the right schema structure, and output the result as valid JSON.&lt;/p&gt;

&lt;p&gt;This is worth explaining because it matters for what the Generator is and isn't.&lt;/p&gt;

&lt;p&gt;It is not a code database. It is not a template engine. It is Claude, with a very specific prompt, generating TypeScript code for your exact use case on demand.&lt;/p&gt;

&lt;p&gt;That means the output is tailored to your description. It also means the quality of what you get depends on how clearly you describe what you want. A precise description produces a precise scaffold. A vague one produces a generic one.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem It Solves
&lt;/h2&gt;

&lt;p&gt;Building an MCP server from scratch has a steep entry cost even for experienced developers. The official MCP TypeScript SDK is well-documented, but documentation takes time to read. And most of what you need to set up — the server initialisation, the tool list handler, the tool call handler, the transport setup — is identical across every server.&lt;/p&gt;

&lt;p&gt;The parts that are unique to your use case are the tool implementations themselves: the actual logic that calls your API, queries your database, or reads your filesystem. Everything else is boilerplate.&lt;/p&gt;

&lt;p&gt;The Generator handles the boilerplate. You write the logic.&lt;/p&gt;

&lt;p&gt;It's the same principle as &lt;code&gt;create-react-app&lt;/code&gt; or &lt;code&gt;npm init&lt;/code&gt; — not a replacement for knowing how to code, but a fast path to the starting line.&lt;/p&gt;




&lt;h2&gt;
  
  
  What You Get
&lt;/h2&gt;

&lt;p&gt;When you run the Generator with a description like "a server that connects to a Postgres database with tools to query tables, list schemas, and run SELECT statements", the output includes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Correct tool registration&lt;/strong&gt; — each tool defined with its name, description, and JSON Schema for input parameters. Missing or incorrect schemas are the most common cause of MCP servers not loading.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Both required request handlers&lt;/strong&gt; — &lt;code&gt;ListToolsRequestSchema&lt;/code&gt; and &lt;code&gt;CallToolRequestSchema&lt;/code&gt;, correctly wired up. Forgetting either breaks the server entirely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Error handling for unknown tools&lt;/strong&gt; — a catch that throws a meaningful error instead of hanging silently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Environment variable placeholders&lt;/strong&gt; — if your server needs an API key or connection string, the Generator uses &lt;code&gt;process.env.YOUR_VAR&lt;/code&gt; with a clear comment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ready-to-use install config&lt;/strong&gt; — the exact JSON snippet for &lt;code&gt;claude_desktop_config.json&lt;/code&gt;, with the correct server name and command.&lt;/p&gt;




&lt;h2&gt;
  
  
  Limitations
&lt;/h2&gt;

&lt;p&gt;The Generator is honest about what it is.&lt;/p&gt;

&lt;p&gt;It produces a scaffold, not a finished server. The tool implementations — the actual calls to your API, the database queries, the file reads — are placeholders that you replace with your own logic. The Generator gives you the correct structure so you don't have to figure that out from documentation. The business logic is yours.&lt;/p&gt;

&lt;p&gt;It requires sign-in to use. This is to prevent abuse of the underlying API call.&lt;/p&gt;

&lt;p&gt;The output is always TypeScript. If you need JavaScript, you can transpile it, but the Generator won't produce JS directly.&lt;/p&gt;

&lt;p&gt;And because it uses a language model to generate code, edge cases or unusual patterns may not always produce exactly what you expect. Treat the output as a strong starting point, not as production-ready code that needs no review.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;The MCP Generator is at &lt;strong&gt;mcpnest.io/tools&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Sign in, describe your server, and get your scaffold. Add your logic, push to GitHub, and if you want it in the MCPNest registry, submit it at mcpnest.io/publish.&lt;/p&gt;

&lt;p&gt;If you build something with it and the listing doesn't exist yet, submitting it helps the registry. Every new server makes it more useful for everyone looking for tools.&lt;/p&gt;

&lt;p&gt;And if the Generator produces something wrong, or if there's a pattern it doesn't handle well, tell me: &lt;a href="mailto:malasartes@mcpnest.io"&gt;malasartes@mcpnest.io&lt;/a&gt;. The prompt gets better every time I learn about a gap.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Ricardo Rodrigues is the founder of MCPNest and a Platform Engineer at BCP in Porto, Portugal. MCPNest is the marketplace and governance layer for MCP servers — 7,561+ servers indexed, with Enterprise workspaces and a Gateway launching June 2026.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; MCP, Model Context Protocol, TypeScript, Claude, AI Tools, Developer Tools, MCP Generator&lt;/p&gt;

</description>
      <category>automation</category>
      <category>mcp</category>
      <category>productivity</category>
      <category>tooling</category>
    </item>
    <item>
      <title>How I Built the MCP Composer — And Why It Was the Most Requested Feature at MCPNest</title>
      <dc:creator>Ricardo Rodrigues</dc:creator>
      <pubDate>Sun, 19 Apr 2026 00:20:51 +0000</pubDate>
      <link>https://dev.to/codemalasartes/-how-i-built-the-mcp-composer-and-why-it-was-the-most-requested-feature-at-mcpnest-570l</link>
      <guid>https://dev.to/codemalasartes/-how-i-built-the-mcp-composer-and-why-it-was-the-most-requested-feature-at-mcpnest-570l</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb1ktj5tm4foftqnha7bj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb1ktj5tm4foftqnha7bj.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I launched MCPNest on April 4th, 2026. Within 48 hours, the most common question in my DMs wasn't "how do I find servers" or "why isn't my server listed."&lt;/p&gt;

&lt;p&gt;It was: &lt;strong&gt;"How do I install multiple servers at once?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That question became the MCP Composer.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem No One Was Talking About
&lt;/h2&gt;

&lt;p&gt;When people discover MCP servers, they don't install one. They install five. A developer setting up Claude for serious work typically wants:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A GitHub server (read repos, create issues, review PRs)&lt;/li&gt;
&lt;li&gt;A database server (query Postgres or SQLite)&lt;/li&gt;
&lt;li&gt;A file system server (read and write local files)&lt;/li&gt;
&lt;li&gt;A documentation server (pull live docs from any library)&lt;/li&gt;
&lt;li&gt;A search server (web or internal search)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's five separate servers. Five separate JSON blocks. Five separate edits to &lt;code&gt;claude_desktop_config.json&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The official config format looks like this:&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;"github"&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;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&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="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@modelcontextprotocol/server-github"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&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;"GITHUB_PERSONAL_ACCESS_TOKEN"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;span class="nl"&gt;"postgres"&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;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&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="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@modelcontextprotocol/server-postgres"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"postgresql://localhost/mydb"&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;"filesystem"&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;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&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="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@modelcontextprotocol/server-filesystem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/Users/me/projects"&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;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;Writing this by hand is error-prone. A missing comma breaks everything. A wrong argument crashes Claude on startup. And when something goes wrong, the error messages are cryptic.&lt;/p&gt;

&lt;p&gt;I watched people spend 30-45 minutes on something that should take 30 seconds. Platform engineers who manage CI/CD pipelines every day were struggling with a JSON config file.&lt;/p&gt;

&lt;p&gt;That was the moment I decided to build the Composer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where the Idea Came From
&lt;/h2&gt;

&lt;p&gt;I'm a Platform Engineer at a bank. During the day, I manage infrastructure tooling — the kind of work where you spend a lot of time thinking about developer experience. Why does it take a new engineer three days to set up their local environment? Why are there seventeen steps in the onboarding doc when there should be one?&lt;/p&gt;

&lt;p&gt;When I started building MCPNest, I knew the discovery problem was obvious — everyone could see there was no central registry for MCP servers. But the &lt;em&gt;installation problem&lt;/em&gt; was the hidden one.&lt;/p&gt;

&lt;p&gt;The gap I saw was this: even if you found the right servers on MCPNest, you still had to manually construct the JSON config, copy it into the right file on your machine, restart Claude, and hope nothing broke.&lt;/p&gt;

&lt;p&gt;That's too many steps. Too much friction between "I want this tool" and "this tool is running."&lt;/p&gt;

&lt;p&gt;The Composer was my answer to that friction.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the MCP Composer Does
&lt;/h2&gt;

&lt;p&gt;The MCP Composer (available at mcpnest.io/compose) lets you build a complete multi-server MCP configuration in under 30 seconds — visually, without touching JSON.&lt;/p&gt;

&lt;p&gt;Here's how it works:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Search and add servers&lt;/strong&gt;&lt;br&gt;
You search the MCPNest catalogue of 7,561+ servers and add any combination to your config. Each server is shown with its compatibility, required arguments, and any environment variables it needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Configure each server&lt;/strong&gt;&lt;br&gt;
For servers that need arguments (like a database URL, a file path, or an API key), the Composer shows you exactly what's needed. You fill in the values once. No looking up documentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Choose your client&lt;/strong&gt;&lt;br&gt;
Select your target: Claude Desktop, Cursor, Windsurf, or VS Code. The Composer generates the exact config format for each client — they're slightly different, and getting the format wrong means nothing works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Copy or download&lt;/strong&gt;&lt;br&gt;
The complete config JSON is ready to paste. Or you can use Bundle Sharing to generate a link that anyone can use to replicate your exact setup in one click.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Six Problems the Composer Solves
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. JSON syntax errors&lt;/strong&gt;&lt;br&gt;
The single biggest cause of "why isn't my MCP server working" is a malformed JSON config. A trailing comma, a missing bracket, wrong quote type — any of these breaks the entire file. The Composer generates syntactically valid JSON every time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Wrong config format per client&lt;/strong&gt;&lt;br&gt;
Claude Desktop, Cursor, Windsurf, and VS Code each have slightly different config formats. Claude Desktop uses &lt;code&gt;claude_desktop_config.json&lt;/code&gt; in one location on Mac, another on Windows. Cursor has its own format. The Composer knows all of them and generates the right one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Missing required arguments&lt;/strong&gt;&lt;br&gt;
Many MCP servers require arguments — a database connection string, a file path, an API token. When you install manually, you often miss these and the server fails silently. The Composer shows every required argument upfront.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Multi-server conflicts&lt;/strong&gt;&lt;br&gt;
When you have ten servers in your config, one bad entry can prevent all of them from loading. The Composer validates the full config before you copy it, catching conflicts before they cause problems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Knowledge barrier&lt;/strong&gt;&lt;br&gt;
Not everyone knows what &lt;code&gt;npx -y&lt;/code&gt; does or why some servers use &lt;code&gt;command: "node"&lt;/code&gt; and others use &lt;code&gt;command: "npx"&lt;/code&gt;. The Composer abstracts this — you see server names, not command syntax.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Sharing and replication&lt;/strong&gt;&lt;br&gt;
If you've built a good MCP stack, sharing it with your team means sending a JSON blob in Slack and hoping they paste it correctly. With Bundle Sharing, you share one link. They click it, they get your full config.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Use the MCP Composer
&lt;/h2&gt;

&lt;p&gt;Go to &lt;strong&gt;mcpnest.io/compose&lt;/strong&gt;. Here's a real example — building a developer stack from scratch:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adding GitHub:&lt;/strong&gt;&lt;br&gt;
Search for "github", select &lt;code&gt;github-mcp-server&lt;/code&gt; (official, 28,700+ stars). The Composer shows you need one environment variable: &lt;code&gt;GITHUB_PERSONAL_ACCESS_TOKEN&lt;/code&gt;. Enter your token. Done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adding Postgres:&lt;/strong&gt;&lt;br&gt;
Search for "postgres", select the official server. The Composer asks for a connection string: &lt;code&gt;postgresql://username:password@localhost:5432/mydb&lt;/code&gt;. Enter it. Done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adding Context7:&lt;/strong&gt;&lt;br&gt;
Search for "context7", add it. No configuration needed — it works immediately with no arguments. The Composer handles the command automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generating the config:&lt;/strong&gt;&lt;br&gt;
Switch to "Claude Desktop" tab. Click "Copy config". Paste into &lt;code&gt;claude_desktop_config.json&lt;/code&gt;. Restart Claude.&lt;/p&gt;

&lt;p&gt;Total time: under two minutes for a three-server setup that would have taken 20-30 minutes manually.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bundle Sharing: The Feature Within the Feature
&lt;/h2&gt;

&lt;p&gt;After I shipped the Composer, something unexpected happened. People started using it not just for themselves — but to share their stacks with others.&lt;/p&gt;

&lt;p&gt;A developer would compose their perfect setup, generate a bundle link, and post it on Reddit or Twitter: "Here's my MCP stack for backend development." Others would click the link, get the full config ready to paste, and be up and running in seconds.&lt;/p&gt;

&lt;p&gt;This became Bundle Sharing — a dedicated feature built on top of the Composer. You can browse shared bundles at mcpnest.io/bundle-sharing, or create your own with the "Share bundle" button in the Composer.&lt;/p&gt;

&lt;p&gt;For teams, this is particularly powerful. A platform engineer sets up the approved MCP stack for their company, generates a bundle link, and shares it in the engineering onboarding doc. Every new hire gets the same setup, correctly configured, in one click.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next for the Composer
&lt;/h2&gt;

&lt;p&gt;The Composer currently handles local MCP servers — the ones you run with &lt;code&gt;npx&lt;/code&gt; or &lt;code&gt;node&lt;/code&gt; on your machine.&lt;/p&gt;

&lt;p&gt;The next evolution is the &lt;strong&gt;Gateway&lt;/strong&gt;, launching June 16, 2026. Instead of each developer running servers locally with their own config, the Gateway gives every workspace a single authenticated URL. One URL replaces the entire config. One click deploys approved servers to your whole team.&lt;/p&gt;

&lt;p&gt;The Composer was the first step in making MCP servers accessible. The Gateway is the step that makes them governable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;The MCP Composer is free, requires no account, and works with Claude Desktop, Cursor, Windsurf, and VS Code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;mcpnest.io/compose&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you have a stack you love, generate a bundle and share it. I'd love to see what people are building.&lt;/p&gt;

&lt;p&gt;And if something doesn't work — if a server config is wrong, if a client format is off, if the Composer is missing a server you need — email me: &lt;a href="mailto:malasartes@mcpnest.io"&gt;malasartes@mcpnest.io&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Ricardo Rodrigues is the founder of MCPNest and a Platform Engineer at BCP in Porto, Portugal. MCPNest is the marketplace and governance layer for MCP servers — 7,561+ servers indexed, with Enterprise workspaces and a Gateway launching June 2026.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; MCP, Model Context Protocol, Claude Desktop, Cursor, AI Tools, Developer Tools, MCP Composer&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>mcp</category>
      <category>showdev</category>
    </item>
    <item>
      <title>MCPNest Enterprise: The Private MCP Registry Your Team Has Been Missing</title>
      <dc:creator>Ricardo Rodrigues</dc:creator>
      <pubDate>Thu, 16 Apr 2026 16:55:42 +0000</pubDate>
      <link>https://dev.to/codemalasartes/mcpnest-enterprise-the-private-mcp-registry-your-team-has-been-missing-3oc3</link>
      <guid>https://dev.to/codemalasartes/mcpnest-enterprise-the-private-mcp-registry-your-team-has-been-missing-3oc3</guid>
      <description>&lt;p&gt;If you're using Claude, Cursor, or Windsurf with MCP servers, you've probably hit this wall: you find a great server, configure it locally, and then spend the next hour explaining to your colleagues how to do the same. JSON configs in Slack messages. "Did you add the right environment variable?" Version mismatches between machines. Someone installs the wrong server. IT has no idea what AI tools are running on company infrastructure.&lt;/p&gt;

&lt;p&gt;MCPNest Enterprise solves this.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is MCPNest Enterprise?
&lt;/h2&gt;

&lt;p&gt;MCPNest (mcpnest.io) is the marketplace for MCP servers — 7,561+ indexed, one-click install for Claude Desktop, Cursor, and Windsurf. Enterprise is the layer built on top of it for teams that need to manage MCP servers at scale, with governance, auditability, and control.&lt;/p&gt;

&lt;p&gt;Think of it as the npm private registry for your team's MCP servers. Or Docker Hub with access control. The same idea: your team gets a curated, approved set of tools — without anyone editing JSON files manually.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Core: Private Workspace
&lt;/h2&gt;

&lt;p&gt;Every Enterprise workspace is a private environment that only your team can access. You create it, invite your colleagues, and from that point forward you have a single source of truth for which MCP servers your team uses.&lt;/p&gt;

&lt;p&gt;No more "which version are you on?" No more "where's the config file for that?"&lt;/p&gt;

&lt;h3&gt;
  
  
  What lives inside a workspace:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Private server registry&lt;/strong&gt; — add any MCP server (remote endpoint or local config) to your workspace. It stays internal and is never exposed publicly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One registry URL&lt;/strong&gt; — a single authenticated endpoint that your team points their Claude Desktop, Cursor, or Windsurf config to. One change on the server side, everyone gets it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version control per server&lt;/strong&gt; — publish versions (v1.0.0, v1.1.0), track what changed, roll back if something breaks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit log&lt;/strong&gt; — every action is logged: who added a server, who published a version, who invited a member, when.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Health monitoring&lt;/strong&gt; — the workspace runs health checks on every remote server. You know immediately when something is degraded or down, before your team starts filing bug reports.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Team Management
&lt;/h2&gt;

&lt;p&gt;Enterprise workspaces have three roles: &lt;strong&gt;Owner&lt;/strong&gt;, &lt;strong&gt;Admin&lt;/strong&gt;, and &lt;strong&gt;Member&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The owner has full control. Admins can add servers, publish versions, and invite members. Members can install and use what's been approved for them — nothing more.&lt;/p&gt;

&lt;p&gt;This matters for enterprise adoption. The platform engineer sets up the workspace and curates the approved servers. Developers self-serve within those guardrails. IT can see the audit log. Everyone wins.&lt;/p&gt;

&lt;p&gt;Inviting a colleague is one email address. They get access immediately if they have an MCPNest account. Remove them just as easily — access is revoked instantly.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Registry Endpoint
&lt;/h2&gt;

&lt;p&gt;This is the most important technical feature.&lt;/p&gt;

&lt;p&gt;Every workspace gets a unique authenticated URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://mcpnest.io/api/registry/YOUR_WORKSPACE_TOKEN
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your team adds this to their Claude Desktop config once:&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;"mcpnest-registry"&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;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&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="s2"&gt;"mcpnest-registry-client"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;"https://mcpnest.io/api/registry/YOUR_TOKEN"&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;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;From that point forward, every server you add to the workspace is automatically available to everyone on the team. No individual config changes. No manual distribution. The registry is the single source of truth, and it updates centrally.&lt;/p&gt;




&lt;h2&gt;
  
  
  Version Control
&lt;/h2&gt;

&lt;p&gt;MCP servers evolve. Endpoints change. Configs need updating. Without version control, you're back to the Slack message problem — "hey everyone, update your config to use the new endpoint."&lt;/p&gt;

&lt;p&gt;With MCPNest Enterprise, you publish a new version to the workspace. Set the version number, write a changelog entry, update the install config if needed. Everyone on the team gets the update automatically through the registry endpoint.&lt;/p&gt;

&lt;p&gt;If the new version breaks something, you can see exactly what changed and when. The audit log has the full history.&lt;/p&gt;




&lt;h2&gt;
  
  
  Health Monitoring
&lt;/h2&gt;

&lt;p&gt;Every workspace has a live health dashboard showing which servers are &lt;strong&gt;Healthy&lt;/strong&gt;, &lt;strong&gt;Degraded&lt;/strong&gt;, or &lt;strong&gt;Down&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Health checks run automatically every 60 minutes against every remote endpoint in your workspace. If a server goes degraded — timeout, authentication failure, unexpected response — you see it in the dashboard immediately. Before your developers start wondering why Claude isn't responding to tool calls.&lt;/p&gt;

&lt;p&gt;You can also trigger a manual health check at any time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Audit Log
&lt;/h2&gt;

&lt;p&gt;Every action in a workspace is logged with the user, the action type, the timestamp, and any relevant details.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Workspace created&lt;/li&gt;
&lt;li&gt;Server added&lt;/li&gt;
&lt;li&gt;Version published&lt;/li&gt;
&lt;li&gt;Member invited&lt;/li&gt;
&lt;li&gt;Member removed&lt;/li&gt;
&lt;li&gt;Health check run&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn't just for debugging. It's for compliance. Enterprise teams need to know what AI tools are running on their infrastructure and who approved them. The audit log gives you that.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Customisable Dashboard
&lt;/h2&gt;

&lt;p&gt;The workspace overview is designed to show what matters to your team, not a generic set of metrics.&lt;/p&gt;

&lt;p&gt;You get five KPI cards — Servers, Members, Installs, Events, Remote — and a grid of widgets you can toggle on and off: the server list, health overview, activity feed, registry endpoint, team members, and quick actions to MCPNest tools.&lt;/p&gt;

&lt;p&gt;Your workspace, your layout. Preferences are saved per workspace.&lt;/p&gt;

&lt;p&gt;The dashboard also supports light and dark mode — persisted in your browser across all workspace pages.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Coming
&lt;/h2&gt;

&lt;p&gt;Enterprise is the foundation. What's being built on top of it:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP Gateway&lt;/strong&gt; (launching June 2026) — one URL per workspace, with routing, authentication, and logging for every tool call. The difference between the current registry and the Gateway is observability: with the Gateway, you see every tool invocation, every parameter, every response. Full auditability at the protocol level.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Invite emails via Resend&lt;/strong&gt; — when you invite a team member, they receive a proper onboarding email.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub sync&lt;/strong&gt; — link a server to a GitHub repository and the workspace automatically picks up new releases.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;MCP is the standard that's emerging for how AI agents connect to tools. Every serious AI-powered development team will eventually need to manage a set of MCP servers — which ones are approved, which versions are running, who has access to what.&lt;/p&gt;

&lt;p&gt;Right now, most teams are doing this manually. JSON configs, documentation wikis, Slack messages. That doesn't scale past five people.&lt;/p&gt;

&lt;p&gt;MCPNest Enterprise is the infrastructure layer that makes MCP adoption manageable at team scale. The same way npm private registries made Node.js dependency management manageable for enterprise teams.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;MCPNest Enterprise is available at mcpnest.io&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggkzowrvix0tmpy4a332.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggkzowrvix0tmpy4a332.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a workspace, add your first server, and share the registry URL with your team. &lt;/p&gt;

&lt;p&gt;If you're building a team AI tooling stack and want to talk, reach out at &lt;a href="mailto:malasartes@mcpnest.io"&gt;malasartes@mcpnest.io&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Ricardo Rodrigues is the founder of MCPNest and a Platform Engineer at BCP. MCPNest is built in Porto, Portugal.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>productivity</category>
      <category>tooling</category>
    </item>
    <item>
      <title>MCPNest - I built an MCP server marketplace in 7 days.</title>
      <dc:creator>Ricardo Rodrigues</dc:creator>
      <pubDate>Tue, 14 Apr 2026 22:46:59 +0000</pubDate>
      <link>https://dev.to/codemalasartes/mcpnest-i-built-an-mcp-server-marketplace-in-7-days-4g35</link>
      <guid>https://dev.to/codemalasartes/mcpnest-i-built-an-mcp-server-marketplace-in-7-days-4g35</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0iv1u2flim94pnok31ih.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0iv1u2flim94pnok31ih.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm a Platform Engineer at a bank in Porto, Portugal.&lt;/p&gt;

&lt;p&gt;On 3 of April I had an idea. Today it's a live product with 7,554 servers, partnerships with Railpush, Grafana and other coming. &lt;/p&gt;

&lt;p&gt;Here's the full story.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;The MCP (Model Context Protocol) ecosystem was exploding. Every week a new server appeared on GitHub, got 500 stars, and disappeared into the void.&lt;/p&gt;

&lt;p&gt;Developers wanting to extend Claude, Cursor, or Windsurf had to dig through GitHub repos, Reddit posts, and scattered READMEs.&lt;/p&gt;

&lt;p&gt;There was no discovery layer. No App Store for MCP.&lt;/p&gt;

&lt;h2&gt;
  
  
  The plan
&lt;/h2&gt;

&lt;p&gt;Build the npm registry for MCP servers. Fast.&lt;/p&gt;

&lt;p&gt;The criteria: buildable in days, real market timing.&lt;br&gt;
MCPNest won.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;Starting from zero, in two weeks:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Discovery&lt;/strong&gt;&lt;br&gt;
7,554+ MCP servers indexed from the official Anthropic registry and GitHub. Search by name, category, client compatibility. Quality Score A–F. Security badges — Verified, No Auth, Local Process, Remote.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;br&gt;
One-click install configs for Claude Desktop, Cursor, Windsurf, and VS Code. Copy one JSON snippet and you're done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bundle Sharing&lt;/strong&gt;&lt;br&gt;
Create a named bundle of multiple MCP servers and share it as a single link. Someone clicks it, gets the combined config for all servers at once. Useful for teams that want to share a standard MCP setup without going through the full Enterprise tier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP Composer&lt;/strong&gt;&lt;br&gt;
Build your full multi-server config visually. Select servers, fill in your keys, copy once.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP Generator&lt;/strong&gt; ← the one I'm most proud of&lt;br&gt;
Describe what you want in plain english. Claude writes the full TypeScript MCP server — tool schema, error handling, stdio transport — plus the install config. From idea to published server in under a minute.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Collections&lt;/strong&gt;&lt;br&gt;
Curated starter packs. Install a full stack in one config.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enterprise Workspace&lt;/strong&gt;&lt;br&gt;
This is the one I'm betting on long term.&lt;/p&gt;

&lt;p&gt;A private MCP registry for teams. The idea came from a conversation with an AI leader at a large enterprise who said: "IT and security won't let us install third-party MCP. We just need the recipe to build it ourselves."&lt;br&gt;
What's live:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Private registry with a single URL — your whole team points their config to it&lt;/li&gt;
&lt;li&gt;Version control — publish v1.1 and every team member gets the updated config immediately, no manual updates&lt;/li&gt;
&lt;li&gt;GitHub sync — link a repo and pull the latest version with one click&lt;/li&gt;
&lt;li&gt;Health monitoring — hourly cron checks all remote server endpoints, updates UP/DOWN status automatically&lt;/li&gt;
&lt;li&gt;Audit log — every action tracked: who added what, when, from where&lt;/li&gt;
&lt;li&gt;Team management — owner, admin, and member roles&lt;/li&gt;
&lt;li&gt;Invite by email — add team members who already have an MCPNest account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The GTM strategy is bottom-up, like Slack. Individual enterprise employees start using it via open source. They build their own configs, use the Composer, share bundles with colleagues. When IT notices, the Enterprise tier gives them the governance layer they need — SSO, audit logs, private registry, version control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Credential Manager&lt;/strong&gt;&lt;br&gt;
Store API keys per server. The biggest friction point in MCP tooling — solved.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Publisher Analytics&lt;/strong&gt;&lt;br&gt;
30-day install charts, client breakdown, weekly performance. Know what's working.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reviews + Ratings&lt;/strong&gt;&lt;br&gt;
The first MCP marketplace with community reviews.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Next.js 16 with Turbopack&lt;/li&gt;
&lt;li&gt;Supabase (database + auth)&lt;/li&gt;
&lt;li&gt;Vercel (hosting)&lt;/li&gt;
&lt;li&gt;Stripe (payments)&lt;/li&gt;
&lt;li&gt;FastAPI crawler on Railway&lt;/li&gt;
&lt;li&gt;Built almost entirely in Claude sessions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The honest part
&lt;/h2&gt;

&lt;p&gt;Features are the easy part. Distribution is hard.&lt;/p&gt;

&lt;p&gt;650 visitors a week is not enough. The product is good. The challenge now is getting people to find it.&lt;/p&gt;

&lt;p&gt;If you're building with MCP — &lt;a href="https://mcpnest.io" rel="noopener noreferrer"&gt;mcpnest.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you publish MCP servers — &lt;a href="https://mcpnest.io/publish" rel="noopener noreferrer"&gt;list yours&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Solo founder. Platform engineer by day. Building as fast as I can.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>showdev</category>
      <category>sideprojects</category>
    </item>
  </channel>
</rss>
