---
title: "How to Publish Your MCP Server to the Official MCP Registry | Viraloop"
description: "Publish an MCP server to registry.modelcontextprotocol.io with mcp-publisher: the mcpName field, server.json, GitHub or DNS auth, and the community directories that mirror the registry."
source: https://viraloop.io/ai-plugin-directories/mcp-registry
---
[AI plugin directories](/ai-plugin-directories)

# How to list on MCP Registry

The MCP Registry is the upstream catalog the client ecosystem reads: IDEs, agent runtimes and the community directories all sync from it. Publishing takes fifteen minutes once the npm package exists, there is no review, and it is the one listing that makes you discoverable in clients you have never heard of. Do it first; the vendor directories above are the polish.

You ship

An npm package with mcpName, plus server.json

Submit at

mcp-publisher publish (registry.modelcontextprotocol.io)

Review

None; automated validation that the package matches the metadata

Auth

GitHub device login, or DNS auth for a custom-domain namespace

01

## Prerequisites

-   An MCP server published as an npm package. The registry hosts metadata only, never the artifact.
-   A GitHub account, for the simplest auth. DNS auth is available if you want the server namespaced under your domain instead of io.github.
-   The mcp-publisher CLI, installed from the GitHub releases or with brew install mcp-publisher.

02

## Publish it

1.  1Add "mcpName": "io.github.<owner>/<server>" to package.json. With GitHub auth the name must start with io.github.<owner>/.
2.  2Build and npm publish --access public. Verify the package page loads.
3.  3Run mcp-publisher init in the project. It writes a server.json with name, description, repository, version and the packages block (registryType npm, identifier, version, transport).
4.  4Make server.json name match mcpName exactly, and bump both versions together.
5.  5Run mcp-publisher login github and complete the device code flow.
6.  6Run mcp-publisher publish. Confirm with the registry search API.

Confirm the listing

curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.<owner>/<server>"

03

## Remote servers and automation

-   The registry supports remote servers: declare the streamable HTTP URL in server.json so clients that prefer hosted MCP can skip the npm package.
-   Publish from GitHub Actions on every release so the registry version never lags the npm version.
-   Registry validation fails when the package is missing mcpName, and permission errors mean the namespace does not match the auth method.

04

## The directories that read the registry

Community directories (Smithery, Glama, mcp.so, PulseMCP and the rest) index the registry and GitHub. Most let you claim or enrich a listing: add a logo, a one-line description in the words your buyer uses and a link to your connect guide. Ten minutes each, and they are what a search for "<your category> MCP" returns.

The registry is in preview. Expect the occasional breaking change or data reset, and keep the publish step in CI so a reset costs one workflow run.

Vendor docs this guide is checked against

-   [Registry quickstart](https://modelcontextprotocol.io/registry/quickstart)modelcontextprotocol.io/registry/quickstart
-   [Registry repo and CLI](https://github.com/modelcontextprotocol/registry)github.com/modelcontextprotocol/registry
-   [Introducing the MCP Registry](https://blog.modelcontextprotocol.io/posts/2025-09-08-mcp-registry-preview/)blog.modelcontextprotocol.io/posts/2025-09-08-mcp-registry-preview/

## Listed is step one.  
Being named is the job.

Assistants recommend the brands they keep seeing. Viraloop generates and posts your short-form content daily, so the model's answer about you stays current.

[Start posting daily](/register)[All directories](/ai-plugin-directories)
