[{"data":1,"prerenderedAt":73},["ShallowReactive",2],{"wiki-mcp-publishing-to-mcp-registry-en":3},{"meta":4,"html":8,"headings":9,"words":72},{"title":5,"description":6,"published":7,"updated":7},"Publishing an MCP server to the MCP Registry","The MCP Registry is the official catalog of MCP server metadata. The server.json format, namespaces, ownership checks, mcp-publisher, versions, subregistries.","2026-11-03","\u003Cp>The \u003Cstrong>MCP Registry\u003C/strong> is the official catalog of metadata about publicly available \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"mcp-server\">MCP servers\u003C/span>, hosted at \u003Ccode>registry.modelcontextprotocol.io\u003C/code>. It does not store code: each entry is a \u003Ccode>server.json\u003C/code> document that names the server, describes it and says where to get it, in a package registry such as npm or PyPI or at the address of a remote server. Publishing a server means sending its \u003Ccode>server.json\u003C/code> to the registry with the \u003Ccode>mcp-publisher\u003C/code> command-line tool after proving ownership of the server's name.\u003C/p>\n\u003Cp>The registry started in February 2025 as a community project, when the authors of MCP, David Soria Parra and Justin Spahr-Summers, asked the PulseMCP and Goose teams to help build a central registry. It was launched in preview on 8 September 2025. The registry is developed by the Registry Working Group of the MCP project.\u003C/p>\n\u003Cp>As of November 2026 its documentation still marks it as a preview: \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"breaking-change\">breaking changes\u003C/span> or data resets may occur before general availability. The API version \u003Ccode>v0.1\u003C/code> has been frozen since 24 October 2025, and the current published version of the \u003Ccode>server.json\u003C/code> schema is \u003Cstrong>2025-12-11\u003C/strong>. Basic concepts of the protocol are described in the article \u003Ca href=\"/en/wiki/mcp/what-is-mcp\" class=\"wiki-link wiki-link--article\">What is MCP\u003C/a>.\u003C/p>\n\u003Ch2 id=\"overview\" class=\"wiki-heading\">Overview\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"overview\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cdiv class=\"wiki-table wiki-table--cols-2\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Property\u003C/th>\n\u003Cth>Value\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Type\u003C/td>\n\u003Ctd>Official catalog of metadata about public MCP servers, with a REST API\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Address\u003C/td>\n\u003Ctd>\u003Ccode>https://registry.modelcontextprotocol.io\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Status\u003C/td>\n\u003Ctd>Preview since 8 September 2025\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>API\u003C/td>\n\u003Ctd>\u003Ccode>v0.1\u003C/code>, frozen since 24 October 2025; read access without authentication\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Entry format\u003C/td>\n\u003Ctd>\u003Ccode>server.json\u003C/code>, schema version 2025-12-11\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Server names\u003C/td>\n\u003Ctd>Reverse-DNS namespace and server name, for example \u003Ccode>io.github.user/weather\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Package types\u003C/td>\n\u003Ctd>npm, PyPI, NuGet, Cargo, Docker/OCI images, MCPB\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Publishing tool\u003C/td>\n\u003Ctd>\u003Ccode>mcp-publisher\u003C/code> CLI\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Developer\u003C/td>\n\u003Ctd>Registry Working Group of the MCP project\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Ch2 id=\"the-problem-it-solves\" class=\"wiki-heading\">The problem it solves\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"the-problem-it-solves\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>An MCP server is distributed in a package registry or runs at a remote address. To find it, a user or an application needs a catalog. To install it, the catalog needs the exact package name, transport and settings.\u003C/p>\n\u003Cp>The announcement of the registry describes its aim as standardizing how servers are distributed and discovered. The registry is meant as a primary source of truth: a single place where the maintainers of a server publish self-reported information about it. Other catalogs, called subregistries, take the data from it and add their own, such as curation, ratings and security checks.\u003C/p>\n\u003Cp>The registry also ties each name to a verified GitHub account or domain, so a server cannot be published under someone else's name. The package that an entry points to must name the server, so the metadata cannot claim a foreign package.\u003C/p>\n\u003Ch2 id=\"history\" class=\"wiki-heading\">History\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"history\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>The table lists the launch of the registry and the main changes of its API and of the \u003Ccode>server.json\u003C/code> schema.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-2\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Date\u003C/th>\n\u003Cth>Event\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>February 2025\u003C/td>\n\u003Ctd>Start of the registry as a community project\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>9 July 2025\u003C/td>\n\u003Ctd>First version of the \u003Ccode>server.json\u003C/code> schema\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>8 September 2025\u003C/td>\n\u003Ctd>Launch of the official MCP Registry in preview\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>16 September 2025\u003C/td>\n\u003Ctd>Schema 2025-09-16: field names change from snake_case to camelCase (\u003Ccode>registryType\u003C/code>, \u003Ccode>environmentVariables\u003C/code>)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>29 September 2025\u003C/td>\n\u003Ctd>Schema 2025-09-29: the status and registry metadata leave \u003Ccode>server.json\u003C/code> and are managed by the registry\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>11 October 2025\u003C/td>\n\u003Ctd>Schema 2025-10-11: the package format depends on the package type; \u003Ccode>version\u003C/code> is optional for OCI and MCPB\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>24 October 2025\u003C/td>\n\u003Ctd>API freeze at version \u003Ccode>v0.1\u003C/code>: no breaking changes while integrators implement support\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>11 December 2025\u003C/td>\n\u003Ctd>Schema 2025-12-11: URL template variables for remote servers\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Ch2 id=\"place-in-the-ecosystem\" class=\"wiki-heading\">Place in the ecosystem\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"place-in-the-ecosystem\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>The diagram below shows the chain from code to host applications. According to the documentation, the official registry is not intended to be consumed by host applications directly: they read subregistries that implement the same API.\u003C/p>\n\u003Cdiv class=\"wiki-code wiki-code--plain\">\u003Cpre>\u003Ccode>Package registries (npm, PyPI, NuGet, crates.io, Docker Hub, GitHub Releases)\n |  code and binaries\n v\nMCP Registry (registry.modelcontextprotocol.io)\n |  server.json metadata, REST API v0.1\n v\nSubregistries and marketplaces (public or private)\n |  curation, ratings, security scans, same API\n v\nHost applications (AI applications that install and connect servers)\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>According to the documentation, the registry is intended primarily for aggregators. It is deliberately unopinionated: it does not rate servers and does not scan their code. Security scanning is left to the package registries and to downstream aggregators.\u003C/p>\n\u003Cp>The registry accepts open-source and closed-source servers, provided that the package is in a public registry or the remote server is publicly accessible. Private servers, available only in a private network or a private package registry, are not accepted. For them the documentation recommends a private registry.\u003C/p>\n\u003Ch2 id=\"the-serverjson-format\" class=\"wiki-heading\">The server.json format\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"the-serverjson-format\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Ch3 id=\"fields\" class=\"wiki-heading\">Fields\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"fields\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>\u003Ccode>server.json\u003C/code> is a JSON document described by a JSON Schema. Its address contains the schema version, and the document refers to it in the \u003Ccode>$schema\u003C/code> field. The main fields:\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-3\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Field\u003C/th>\n\u003Cth>Required\u003C/th>\n\u003Cth>Content\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>$schema\u003C/code>\u003C/td>\n\u003Ctd>no\u003C/td>\n\u003Ctd>URL of the schema, for example the 2025-12-11 version\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>name\u003C/code>\u003C/td>\n\u003Ctd>yes\u003C/td>\n\u003Ctd>Unique name in reverse-DNS form, 3 to 200 characters, exactly one \u003Ccode>/\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>description\u003C/code>\u003C/td>\n\u003Ctd>yes\u003C/td>\n\u003Ctd>What the server does, 1 to 100 characters\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>version\u003C/code>\u003C/td>\n\u003Ctd>yes\u003C/td>\n\u003Ctd>Version of this publication, up to 255 characters; ranges are not allowed\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>title\u003C/code>\u003C/td>\n\u003Ctd>no\u003C/td>\n\u003Ctd>Display name, up to 100 characters\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>repository\u003C/code>\u003C/td>\n\u003Ctd>no\u003C/td>\n\u003Ctd>Source code: \u003Ccode>url\u003C/code>, \u003Ccode>source\u003C/code> (for example \u003Ccode>github\u003C/code>), optional \u003Ccode>subfolder\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>websiteUrl\u003C/code>\u003C/td>\n\u003Ctd>no\u003C/td>\n\u003Ctd>Home page or documentation\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>icons\u003C/code>\u003C/td>\n\u003Ctd>no\u003C/td>\n\u003Ctd>Icons for user interfaces\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>packages\u003C/code>\u003C/td>\n\u003Ctd>no\u003C/td>\n\u003Ctd>Packages: \u003Ccode>registryType\u003C/code>, \u003Ccode>identifier\u003C/code>, \u003Ccode>version\u003C/code>, \u003Ccode>transport\u003C/code> and settings\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>remotes\u003C/code>\u003C/td>\n\u003Ctd>no\u003C/td>\n\u003Ctd>Remote endpoints: \u003Ccode>type\u003C/code> and \u003Ccode>url\u003C/code>, optional \u003Ccode>headers\u003C/code> and \u003Ccode>variables\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>_meta\u003C/code>\u003C/td>\n\u003Ctd>no\u003C/td>\n\u003Ctd>Additional metadata of the publisher\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>A package entry requires \u003Ccode>registryType\u003C/code>, \u003Ccode>identifier\u003C/code> and \u003Ccode>transport\u003C/code>. The type of the transport of a package is \u003Ccode>stdio\u003C/code>, \u003Ccode>streamable-http\u003C/code> or \u003Ccode>sse\u003C/code>. A package can also describe how to start it: \u003Ccode>runtimeHint\u003C/code>, \u003Ccode>runtimeArguments\u003C/code>, \u003Ccode>packageArguments\u003C/code> and \u003Ccode>environmentVariables\u003C/code>, each variable with \u003Ccode>name\u003C/code>, \u003Ccode>description\u003C/code>, \u003Ccode>isRequired\u003C/code> and \u003Ccode>isSecret\u003C/code>.\u003C/p>\n\u003Ch3 id=\"example\" class=\"wiki-heading\">Example\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"example\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>The example describes a server that is distributed as an npm package and is also available as a remote server:\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"json\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">JSON\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Copied\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Copy\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Copied\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode>{\n  &quot;$schema&quot;: &quot;https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json&quot;,\n  &quot;name&quot;: &quot;io.github.example-user/weather&quot;,\n  &quot;title&quot;: &quot;Weather&quot;,\n  &quot;description&quot;: &quot;Current weather and forecasts for any city.&quot;,\n  &quot;version&quot;: &quot;1.2.0&quot;,\n  &quot;repository&quot;: {\n    &quot;url&quot;: &quot;https://github.com/example-user/mcp-weather-server&quot;,\n    &quot;source&quot;: &quot;github&quot;\n  },\n  &quot;packages&quot;: [\n    {\n      &quot;registryType&quot;: &quot;npm&quot;,\n      &quot;identifier&quot;: &quot;@example-user/mcp-weather-server&quot;,\n      &quot;version&quot;: &quot;1.2.0&quot;,\n      &quot;transport&quot;: {\n        &quot;type&quot;: &quot;stdio&quot;\n      },\n      &quot;environmentVariables&quot;: [\n        {\n          &quot;name&quot;: &quot;WEATHER_API_KEY&quot;,\n          &quot;description&quot;: &quot;API key of the weather data provider&quot;,\n          &quot;isRequired&quot;: true,\n          &quot;isSecret&quot;: true\n        }\n      ]\n    }\n  ],\n  &quot;remotes&quot;: [\n    {\n      &quot;type&quot;: &quot;streamable-http&quot;,\n      &quot;url&quot;: &quot;https://weather.example.com/mcp&quot;\n    }\n  ]\n}\u003C/code>\u003C/pre>\u003C/div>\n\u003Ch3 id=\"publisher-metadata\" class=\"wiki-heading\">Publisher metadata\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"publisher-metadata\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>The \u003Ccode>_meta\u003C/code> field uses reverse-DNS keys. The official registry keeps only the data under the key \u003Ccode>io.modelcontextprotocol.registry/publisher-provided\u003C/code> and silently drops other keys. This data is limited to 4096 bytes of JSON; a larger block makes the publication fail.\u003C/p>\n\u003Cp>The registry adds its own metadata in API responses, outside \u003Ccode>server.json\u003C/code>, under the key \u003Ccode>io.modelcontextprotocol.registry/official\u003C/code>: the status, the dates of publication and update, and the \u003Ccode>isLatest\u003C/code> flag. Publishers cannot set these fields.\u003C/p>\n\u003Ch2 id=\"namespaces\" class=\"wiki-heading\">Namespaces\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"namespaces\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>The name of a server consists of a namespace and the name of the server within it, separated by \u003Ccode>/\u003C/code>. The namespace is written in reverse-DNS form: the parts of a domain in reverse order. The way the publisher authenticates determines which namespaces it can use.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-3\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Authentication\u003C/th>\n\u003Cth>Namespace\u003C/th>\n\u003Cth>Example\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>GitHub (OAuth or OIDC)\u003C/td>\n\u003Ctd>\u003Ccode>io.github.&lt;username&gt;/*\u003C/code> or \u003Ccode>io.github.&lt;orgname&gt;/*\u003C/code>\u003C/td>\n\u003Ctd>\u003Ccode>io.github.alice/weather-server\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>DNS\u003C/td>\n\u003Ctd>\u003Ccode>com.example/*\u003C/code> and namespaces of subdomains, \u003Ccode>com.example.*/*\u003C/code>\u003C/td>\n\u003Ctd>\u003Ccode>com.example.api/analytics\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>HTTP\u003C/td>\n\u003Ctd>\u003Ccode>com.example/*\u003C/code> only\u003C/td>\n\u003Ctd>\u003Ccode>com.example/analytics\u003C/code>\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>GitHub authentication always grants the personal namespace. An organization namespace requires the role of Owner in that organization; ordinary membership is not enough. As of November 2026, the documentation notes that \u003Ccode>mcp-publisher login github\u003C/code> cannot publish to an organization namespace, while login through OIDC or with a personal access token can.\u003C/p>\n\u003Cp>A domain namespace is proved with DNS or HTTP. In the code of the registry, DNS verification grants the domain and all its subdomains, and HTTP verification only the domain itself. Domains \u003Ccode>github.io\u003C/code> and its subdomains cannot be used with DNS or HTTP verification: the \u003Ccode>io.github.*\u003C/code> namespaces are available only through GitHub authentication.\u003C/p>\n\u003Ch2 id=\"ownership-verification\" class=\"wiki-heading\">Ownership verification\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"ownership-verification\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>Before publishing, the publisher logs in to the registry with \u003Ccode>mcp-publisher login\u003C/code> and receives a token of the registry. The method of login proves control of the namespace.\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>GitHub OAuth.\u003C/strong> \u003Ccode>mcp-publisher login github\u003C/code> starts the device flow: the user opens \u003Ccode>https://github.com/login/device\u003C/code> and enters the code printed in the terminal. With the \u003Ccode>--token\u003C/code> option, a personal access token is used instead.\u003C/li>\n\u003Cli>\u003Cstrong>GitHub OIDC.\u003C/strong> \u003Ccode>mcp-publisher login github-oidc\u003C/code> is used in GitHub Actions. The workflow needs the \u003Ccode>id-token: write\u003C/code> permission and no separate secret.\u003C/li>\n\u003Cli>\u003Cstrong>DNS.\u003C/strong> The publisher generates a key pair (Ed25519 or ECDSA P-384) and publishes the public key in a TXT record at the apex of the domain, not under a selector such as \u003Ccode>_mcp-auth\u003C/code>. The login command signs a timestamp with the private key.\u003C/li>\n\u003Cli>\u003Cstrong>HTTP.\u003C/strong> The same record, \u003Ccode>v=MCPv1; k=ed25519; p=&lt;public key&gt;\u003C/code>, is served as a file at \u003Ccode>https://&lt;domain&gt;/.well-known/mcp-registry-auth\u003C/code>. The registry fetches it from its own infrastructure, does not follow redirects and expects status 200 within 10 seconds.\u003C/li>\n\u003C/ul>\n\u003Cp>DNS verification with an Ed25519 key, following the documentation of the registry:\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"bash\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">Bash\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Copied\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Copy\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Copied\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode>MY_DOMAIN=&quot;example.com&quot;\n\n# Generate an Ed25519 key pair\nopenssl genpkey -algorithm Ed25519 -out key.pem\n\n# Print the TXT record to add at the apex of the domain\nPUBLIC_KEY=&quot;$(openssl pkey -in key.pem -pubout -outform DER | tail -c 32 | base64)&quot;\necho &quot;${MY_DOMAIN}. IN TXT \\&quot;v=MCPv1; k=ed25519; p=${PUBLIC_KEY}\\&quot;&quot;\n\n# After the record has propagated, log in with the private key\nPRIVATE_KEY=&quot;$(openssl pkey -in key.pem -noout -text | grep -A3 &quot;priv:&quot; | tail -n +2 | tr -d ' :\\n')&quot;\nmcp-publisher login dns --domain &quot;${MY_DOMAIN}&quot; --private-key &quot;${PRIVATE_KEY}&quot;\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>The private key can also stay in Google Cloud KMS or Azure Key Vault; \u003Ccode>mcp-publisher\u003C/code> has login variants for both.\u003C/p>\n\u003Ch2 id=\"package-verification\" class=\"wiki-heading\">Package verification\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"package-verification\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>The registry also checks that the package referenced in \u003Ccode>server.json\u003C/code> belongs to the publisher of the name. Each package type has its own marker that must contain the server name exactly:\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-3\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>\u003Ccode>registryType\u003C/code>\u003C/th>\n\u003Cth>Supported registry\u003C/th>\n\u003Cth>Ownership marker\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>npm\u003C/code>\u003C/td>\n\u003Ctd>\u003Ccode>registry.npmjs.org\u003C/code>\u003C/td>\n\u003Ctd>\u003Ccode>mcpName\u003C/code> field in \u003Ccode>package.json\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pypi\u003C/code>\u003C/td>\n\u003Ctd>\u003Ccode>pypi.org\u003C/code>\u003C/td>\n\u003Ctd>String \u003Ccode>mcp-name: &lt;server name&gt;\u003C/code> in the README, may be in an HTML comment\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>nuget\u003C/code>\u003C/td>\n\u003Ctd>\u003Ccode>api.nuget.org\u003C/code>\u003C/td>\n\u003Ctd>String \u003Ccode>mcp-name: &lt;server name&gt;\u003C/code> in the README, may be in an HTML comment\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>cargo\u003C/code>\u003C/td>\n\u003Ctd>\u003Ccode>crates.io\u003C/code>\u003C/td>\n\u003Ctd>String \u003Ccode>mcp-name: &lt;server name&gt;\u003C/code> as visible text in the README; crates.io removes HTML comments\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>oci\u003C/code>\u003C/td>\n\u003Ctd>Docker Hub, GHCR, Quay.io, Google Artifact Registry, Azure Container Registry, Microsoft Container Registry\u003C/td>\n\u003Ctd>Annotation \u003Ccode>io.modelcontextprotocol.server.name\u003C/code> of the image\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>mcpb\u003C/code>\u003C/td>\n\u003Ctd>GitHub and GitLab releases\u003C/td>\n\u003Ctd>URL contains &quot;mcp&quot;; \u003Ccode>fileSha256\u003C/code> with the SHA-256 of the file is required\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>For an npm package the marker looks like this:\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"json\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">JSON\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Copied\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Copy\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Copied\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode>{\n  &quot;name&quot;: &quot;@example-user/mcp-weather-server&quot;,\n  &quot;version&quot;: &quot;1.2.0&quot;,\n  &quot;mcpName&quot;: &quot;io.github.example-user/weather&quot;\n}\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>For an OCI image the annotation is set with a \u003Ccode>LABEL\u003C/code> instruction in the Dockerfile, for example \u003Ccode>LABEL io.modelcontextprotocol.server.name=&quot;io.github.example-user/weather&quot;\u003C/code>. The registry does not check the hash of an MCPB file; according to the documentation, \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"mcp-client\">MCP clients\u003C/span> check it before installation.\u003C/p>\n\u003Cp>Only these public registries are accepted. Private package registries and mirrors are not supported by the official registry.\u003C/p>\n\u003Ch2 id=\"remote-servers\" class=\"wiki-heading\">Remote servers\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"remote-servers\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>A remote server is described in the \u003Ccode>remotes\u003C/code> array. Such an entry needs no \u003Ccode>packages\u003C/code>, and package verification does not apply to it. The URL must be publicly accessible.\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Transport.\u003C/strong> \u003Ccode>type\u003C/code> is \u003Ccode>streamable-http\u003C/code> or \u003Ccode>sse\u003C/code>. The documentation recommends \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"streamable-http\">Streamable HTTP\u003C/span> and describes SSE as deprecated, to be published only for existing clients.\u003C/li>\n\u003Cli>\u003Cstrong>URL variables.\u003C/strong> The URL can contain variables in curly braces, such as \u003Ccode>https://{tenant_id}.analytics.example.com/mcp\u003C/code>, with a description, a default value and a list of choices in \u003Ccode>variables\u003C/code>. The user supplies the values when configuring the server.\u003C/li>\n\u003Cli>\u003Cstrong>Headers.\u003C/strong> \u003Ccode>headers\u003C/code> lists HTTP headers that the client must send, for example an API key, with the flags \u003Ccode>isRequired\u003C/code> and \u003Ccode>isSecret\u003C/code>.\u003C/li>\n\u003C/ul>\n\u003Cp>The registry checks control of the namespace, not of the URL. Each remote URL can belong to only one server name: a publication with a URL already used by another server fails. \u003Ccode>packages\u003C/code> and \u003Ccode>remotes\u003C/code> can be combined, and the host application then chooses the way to install.\u003C/p>\n\u003Ch2 id=\"publishing-with-mcp-publisher\" class=\"wiki-heading\">Publishing with mcp-publisher\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"publishing-with-mcp-publisher\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>\u003Ccode>mcp-publisher\u003C/code> is installed as a pre-built binary from the releases of the \u003Ccode>modelcontextprotocol/registry\u003C/code> repository or with Homebrew. Its commands:\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-2\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Command\u003C/th>\n\u003Cth>What it does\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>mcp-publisher init\u003C/code>\u003C/td>\n\u003Ctd>Creates a \u003Ccode>server.json\u003C/code> template from the project files\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>mcp-publisher validate\u003C/code>\u003C/td>\n\u003Ctd>Checks \u003Ccode>server.json\u003C/code> against the schema and the rules of the registry without publishing\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>mcp-publisher login &lt;method&gt;\u003C/code>\u003C/td>\n\u003Ctd>Logs in: \u003Ccode>github\u003C/code>, \u003Ccode>github-oidc\u003C/code>, \u003Ccode>dns\u003C/code>, \u003Ccode>http\u003C/code>; \u003Ccode>none\u003C/code> only for a local registry\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>mcp-publisher publish\u003C/code>\u003C/td>\n\u003Ctd>Sends \u003Ccode>server.json\u003C/code> to the registry\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>mcp-publisher status\u003C/code>\u003C/td>\n\u003Ctd>Changes the status of a version or of all versions: \u003Ccode>active\u003C/code>, \u003Ccode>deprecated\u003C/code>, \u003Ccode>deleted\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>mcp-publisher logout\u003C/code>\u003C/td>\n\u003Ctd>Deletes the stored token\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>A typical publication of an npm-based server consists of publishing the package and then its metadata:\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"bash\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">Bash\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Copied\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Copy\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Copied\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode># The package goes to npm first: the registry stores only metadata\nnpm publish --access public\n\n# Create and check server.json\nmcp-publisher init\nmcp-publisher validate\n\n# Log in with GitHub and publish\nmcp-publisher login github\nmcp-publisher publish\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>During publication the registry validates the document, checks the namespace against the token and verifies the ownership of each package.\u003C/p>\n\u003Cp>Publication can be automated with GitHub Actions. The documentation recommends OIDC, pinning a specific release of \u003Ccode>mcp-publisher\u003C/code> and verifying its Sigstore signature before use. Running tests in such \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"ci-pipeline\">pipelines\u003C/span> is described in the article \u003Ca href=\"/en/wiki/test-automation/automated-tests-in-ci\" class=\"wiki-link wiki-link--article\">Automated tests in CI\u003C/a>.\u003C/p>\n\u003Ch2 id=\"versions-and-statuses\" class=\"wiki-heading\">Versions and statuses\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"versions-and-statuses\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>Each publication has its own \u003Ccode>version\u003C/code>, unique for the server. A published version cannot be changed: to correct metadata, a new version is published. The registry recommends semantic versioning but accepts any string, except strings that look like ranges, such as \u003Ccode>^1.2.3\u003C/code>, \u003Ccode>~1.2.3\u003C/code>, \u003Ccode>&gt;=1.2.3\u003C/code> or \u003Ccode>1.x\u003C/code>.\u003C/p>\n\u003Cp>The registry marks a version as the latest (\u003Ccode>isLatest\u003C/code>) by comparing semantic versions. A version that cannot be parsed as a semantic version is always marked as the latest. To change only the metadata without a new package, it recommends a prerelease version such as \u003Ccode>1.2.3-1\u003C/code>; such a version sorts before \u003Ccode>1.2.3\u003C/code> and does not become the latest if published after it.\u003C/p>\n\u003Cp>The status of a version is the only field that changes after publication:\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-2\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Status\u003C/th>\n\u003Cth>Meaning\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>active\u003C/code>\u003C/td>\n\u003Ctd>The server is visible in default listings\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>deprecated\u003C/code>\u003C/td>\n\u003Ctd>The server stays visible, with a message such as &quot;Please upgrade to 2.0.0&quot;\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>deleted\u003C/code>\u003C/td>\n\u003Ctd>The server is hidden from default listings; the metadata remains available with \u003Ccode>include_deleted=true\u003C/code>\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Metadata is never removed completely. A deleted server can be restored by setting the status back to \u003Ccode>active\u003C/code>.\u003C/p>\n\u003Ch2 id=\"registry-api\" class=\"wiki-heading\">Registry API\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"registry-api\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>The API of the official registry is open for reading without authentication. The main endpoints:\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-2\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Endpoint\u003C/th>\n\u003Cth>What it returns\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET /v0.1/servers\u003C/code>\u003C/td>\n\u003Ctd>List of servers, one record per version; parameters \u003Ccode>search\u003C/code>, \u003Ccode>version\u003C/code>, \u003Ccode>updated_since\u003C/code>, \u003Ccode>include_deleted\u003C/code>, \u003Ccode>limit\u003C/code>, \u003Ccode>cursor\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET /v0.1/servers/{serverName}/versions\u003C/code>\u003C/td>\n\u003Ctd>All versions of a server\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET /v0.1/servers/{serverName}/versions/{version}\u003C/code>\u003C/td>\n\u003Ctd>One version; \u003Ccode>latest\u003C/code> returns the latest one\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Server names in the path are URL-encoded: \u003Ccode>io.github.example-user%2Fweather\u003C/code>. The list uses cursor pagination: the response contains \u003Ccode>metadata.nextCursor\u003C/code>, which is passed as \u003Ccode>cursor\u003C/code> in the next request. \u003Ccode>version=latest\u003C/code> returns only the latest version of each server. \u003Ccode>updated_since\u003C/code> with an RFC 3339 timestamp returns the servers changed since then and is used for incremental synchronization.\u003C/p>\n\u003Cp>The documentation expects aggregators to read the registry on a regular but infrequent schedule, for example once per hour, and to keep the data in their own storage. The official registry gives no guarantees of availability or data durability.\u003C/p>\n\u003Ch2 id=\"subregistries-and-private-registries\" class=\"wiki-heading\">Subregistries and private registries\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"subregistries-and-private-registries\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>The registry defines an OpenAPI specification of its API. A \u003Cstrong>subregistry\u003C/strong> is an aggregator that implements this specification, so host applications can read it in the same way as the official registry. A subregistry can add its own metadata, such as ratings, download counts or scan results, under its own key in \u003Ccode>_meta\u003C/code>, for example \u003Ccode>com.example.subregistry/custom\u003C/code>.\u003C/p>\n\u003Cp>Private registries of companies implement the same specification for their internal servers. In the specification, the publication endpoints are optional, and a registry can be read-only. A registry that requires authentication follows the MCP authorization specification and acts as an OAuth 2.1 resource server; the recommended scopes are \u003Ccode>mcp-registry:read\u003C/code> and \u003Ccode>mcp-registry:write\u003C/code>. The official registry itself uses its own JWT-based tokens for publication.\u003C/p>\n\u003Cp>The code of the official registry is open, but according to its documentation it is not designed for self-hosting, and the maintainers do not support such use. An organization that forks it maintains and operates the fork on its own.\u003C/p>\n\u003Ch2 id=\"moderation\" class=\"wiki-heading\">Moderation\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"moderation\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>The moderation policy of the official registry is permissive. The registry removes illegal content, malware, spam and servers that do not work. Spam includes, for example, the same server published under different names.\u003C/p>\n\u003Cp>The registry does not remove low-quality or buggy servers, servers with security vulnerabilities, duplicates of other servers or servers with adult content. The policy states that the registry makes no guarantees about moderation and relies on package registries and subregistries for deeper checks. A removed server gets the status \u003Ccode>deleted\u003C/code>, and its metadata remains available through the API; in extreme cases, such as unlawful metadata, it can be overwritten or erased. Abuse is reported to the package registry and in an issue of the registry repository whose title starts with &quot;Abuse report:&quot;.\u003C/p>\n\u003Ch2 id=\"the-registry-package-registries-and-subregistries\" class=\"wiki-heading\">The registry, package registries and subregistries\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"the-registry-package-registries-and-subregistries\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>The table compares the MCP Registry with the two kinds of systems it works with.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-4\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>\u003C/th>\n\u003Cth>Package registry\u003C/th>\n\u003Cth>MCP Registry\u003C/th>\n\u003Cth>Subregistry or marketplace\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>What it stores\u003C/td>\n\u003Ctd>Code and binaries\u003C/td>\n\u003Ctd>Metadata: name, description, packages, endpoints\u003C/td>\n\u003Ctd>Copy of the metadata plus its own data\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Who publishes\u003C/td>\n\u003Ctd>Package author\u003C/td>\n\u003Ctd>Server publisher, with verified namespace and package\u003C/td>\n\u003Ctd>Takes data from the MCP Registry\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Curation\u003C/td>\n\u003Ctd>Own scanning and policies\u003C/td>\n\u003Ctd>Minimal: illegal content, malware, spam, broken servers\u003C/td>\n\u003Ctd>Ratings, scans, selection\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Consumers\u003C/td>\n\u003Ctd>Package managers\u003C/td>\n\u003Ctd>Aggregators and subregistries\u003C/td>\n\u003Ctd>Host applications and users\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Example\u003C/td>\n\u003Ctd>npm, PyPI, Docker Hub\u003C/td>\n\u003Ctd>\u003Ccode>registry.modelcontextprotocol.io\u003C/code>\u003C/td>\n\u003Ctd>GitHub MCP Registry, a private company registry\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>The MCP Registry does not replace a package registry. A package is published first, in its own registry, and the MCP Registry refers to it. The ownership markers connect the two: the package names the server, and the server names the package.\u003C/p>\n\u003Cp>A subregistry does not replace the MCP Registry either: it takes the data from it and applies its own selection. Testing a server before publication is described in the article \u003Ca href=\"/en/wiki/mcp/testing-mcp-servers\" class=\"wiki-link wiki-link--article\">Testing MCP servers\u003C/a>, and regression checks between versions in the article \u003Ca href=\"/en/wiki/mcp/mcp-server-regression-testing\" class=\"wiki-link wiki-link--article\">Regression testing of an MCP server\u003C/a>.\u003C/p>\n\u003Ch2 id=\"terms\" class=\"wiki-heading\">Terms\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"terms\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cdiv class=\"wiki-table wiki-table--cols-2\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Term\u003C/th>\n\u003Cth>Meaning\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>MCP Registry\u003C/td>\n\u003Ctd>Official catalog of metadata about publicly available MCP servers at \u003Ccode>registry.modelcontextprotocol.io\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>server.json\u003C/code>\u003C/td>\n\u003Ctd>JSON document that describes an MCP server: name, description, version, packages, remote endpoints\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Server namespace\u003C/td>\n\u003Ctd>Part of the server name before \u003Ccode>/\u003C/code>, in reverse-DNS form, tied to a GitHub account or a domain\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Package ownership marker\u003C/td>\n\u003Ctd>Value in a package, such as \u003Ccode>mcpName\u003C/code> or \u003Ccode>mcp-name:\u003C/code>, that names the server and links the package to it\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>mcp-publisher\u003C/code>\u003C/td>\n\u003Ctd>Official CLI for creating, validating and publishing \u003Ccode>server.json\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Remote server entry\u003C/td>\n\u003Ctd>Element of \u003Ccode>remotes\u003C/code> with the transport type and the public URL of a server\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Subregistry\u003C/td>\n\u003Ctd>Aggregator that copies data from the MCP Registry, adds its own and implements the same API\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Private registry\u003C/td>\n\u003Ctd>Registry of an organization that implements the registry API for internal servers\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Ch2 id=\"sources\" class=\"wiki-heading\">Sources\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"sources\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/registry/about\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">The MCP Registry, modelcontextprotocol.io\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/registry/quickstart\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Quickstart: Publish an MCP Server to the MCP Registry\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/registry/authentication\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">How to Authenticate When Publishing to the Official MCP Registry\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/registry/package-types\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">MCP Registry Supported Package Types\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/registry/remote-servers\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Publishing Remote Servers\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/registry/versioning\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Versioning Published MCP Servers\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/registry/github-actions\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">How to Automate Publishing with GitHub Actions\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/registry/registry-aggregators\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">MCP Registry Aggregators\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/registry/moderation-policy\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">The MCP Registry Moderation Policy\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/registry/faq\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Frequently Asked Questions, MCP Registry\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://github.com/modelcontextprotocol/registry\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">MCP Registry repository, GitHub\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/server-json/CHANGELOG.md\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Server JSON Schema Changelog, GitHub\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/server-json/official-registry-requirements.md\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Official Registry server.json Requirements, GitHub\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/cli/commands.md\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Publisher CLI Commands Reference, GitHub\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/api/generic-registry-api.md\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Generic Registry API Specification, GitHub\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/api/registry-authorization.md\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Registry Authorization, GitHub\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://blog.modelcontextprotocol.io/posts/2025-09-08-mcp-registry-preview/\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Introducing the MCP Registry, MCP blog, 8 September 2025\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003C/ul>\n",[10,14,17,20,23,26,30,33,36,39,42,45,48,51,54,57,60,63,66,69],{"id":11,"level":12,"text":13},"overview",2,"Overview",{"id":15,"level":12,"text":16},"the-problem-it-solves","The problem it solves",{"id":18,"level":12,"text":19},"history","History",{"id":21,"level":12,"text":22},"place-in-the-ecosystem","Place in the ecosystem",{"id":24,"level":12,"text":25},"the-serverjson-format","The server.json format",{"id":27,"level":28,"text":29},"fields",3,"Fields",{"id":31,"level":28,"text":32},"example","Example",{"id":34,"level":28,"text":35},"publisher-metadata","Publisher metadata",{"id":37,"level":12,"text":38},"namespaces","Namespaces",{"id":40,"level":12,"text":41},"ownership-verification","Ownership verification",{"id":43,"level":12,"text":44},"package-verification","Package verification",{"id":46,"level":12,"text":47},"remote-servers","Remote servers",{"id":49,"level":12,"text":50},"publishing-with-mcp-publisher","Publishing with mcp-publisher",{"id":52,"level":12,"text":53},"versions-and-statuses","Versions and statuses",{"id":55,"level":12,"text":56},"registry-api","Registry API",{"id":58,"level":12,"text":59},"subregistries-and-private-registries","Subregistries and private registries",{"id":61,"level":12,"text":62},"moderation","Moderation",{"id":64,"level":12,"text":65},"the-registry-package-registries-and-subregistries","The registry, package registries and subregistries",{"id":67,"level":12,"text":68},"terms","Terms",{"id":70,"level":12,"text":71},"sources","Sources",2850,1793718949143]