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

# 如何认证发布到官方 MCP 注册表

<Note>
  MCP 注册表目前处于预览阶段。在普遍可用之前，可能会发生破坏性更改或数据重置。如果遇到任何问题，请在 [GitHub](https://github.com/modelcontextprotocol/registry/issues) 上报告。
</Note>

在发布到官方 MCP 注册表之前，您必须进行认证。MCP 注册表支持不同的认证方法。您选择的认证方法决定了服务器名称的命名空间。

如果您选择基于 GitHub 的认证，`server.json` 中的服务器名称 **必须** 为 `io.github.username/*` (或 `io.github.orgname/*`) 格式。例如，`io.github.alice/weather-server`。

如果您选择基于域名的认证，`server.json` 中的服务器名称 **必须** 为 `com.example.*/*` 格式，其中 `com.example` 是您域名的反向 DNS 形式。例如，`io.modelcontextprotocol/everything`。

| 认证        | 名称格式                                           | 示例名称                                 |
| --------- | ---------------------------------------------- | ------------------------------------ |
| 基于 GitHub | `io.github.username/*` 或 `io.github.orgname/*` | `io.github.alice/weather-server`     |
| 基于域名      | `com.example.*/*`                              | `io.modelcontextprotocol/everything` |

## GitHub 认证

GitHub 认证使用由 `mcp-publisher` CLI 工具发起的 OAuth 流程。

要执行 GitHub 认证，请导航到您的服务器项目目录并运行：

```bash theme={null}
mcp-publisher login github
```

您应该看到如下输出：

```text Output theme={null}
正在使用 github 登录...

要进行认证，请：
1. 前往：https://github.com/login/device
2. 输入代码：ABCD-1234
3. 授权此应用程序
正在等待授权...
```

访问链接，按照提示操作，并输入终端中打印的授权代码（例如，上述输出中的 `ABCD-1234`）。完成后，返回终端，您应该看到如下输出：

```text Output theme={null}
认证成功！
✓ 成功登录
```

## DNS 认证

DNS 认证是一种基于域名的认证方法，依赖于 DNS TXT 记录。

要使用 `mcp-publisher` CLI 工具执行 DNS 认证，请在您的服务器项目目录中运行以下命令，以基于公钥/私钥对生成 TXT 记录：

<CodeGroup>
  ```bash Ed25519 theme={null}
  MY_DOMAIN="example.com"

  # 使用 Ed25519 生成公钥/私钥对
  openssl genpkey -algorithm Ed25519 -out key.pem

  # 生成 TXT 记录
  PUBLIC_KEY="$(openssl pkey -in key.pem -pubout -outform DER | tail -c 32 | base64)"
  echo "${MY_DOMAIN}. IN TXT \"v=MCPv1; k=ed25519; p=${PUBLIC_KEY}\""
  ```

  ```bash ECDSA P-384 theme={null}
  MY_DOMAIN="example.com"

  # 使用 ECDSA P-384 生成公钥/私钥对
  openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:secp384r1 -out key.pem

  # 生成 TXT 记录
  PUBLIC_KEY="$(openssl ec -in key.pem -text -noout -conv_form compressed | grep -A4 "pub:" | tail -n +2 | tr -d ' :\n' | xxd -r -p | base64)"
  echo "${MY_DOMAIN}. IN TXT \"v=MCPv1; k=ecdsap384; p=${PUBLIC_KEY}\""
  ```

  ```bash Google KMS theme={null}
  MY_DOMAIN="example.com"
  MY_PROJECT="myproject"
  MY_KEYRING="mykeyring"
  MY_KEY_NAME="mykey"

  # 使用 gcloud CLI 登录 (https://cloud.google.com/sdk/docs/install)
  gcloud auth login

  # 设置默认项目
  gcloud config set project "${MY_PROJECT}"

  # 在您的项目中创建密钥环
  gcloud kms keyrings create "${MY_KEYRING}" --location global

  # 创建 Ed25519 签名密钥
  gcloud kms keys create "${MY_KEY_NAME}" --default-algorithm=ec-sign-ed25519 --purpose=asymmetric-signing --keyring="${MY_KEYRING}" --location=global

  # 启用应用默认凭据 (ADC) 以便发布工具可以签名
  gcloud auth application-default login

  # 尝试登录以显示公钥
  mcp-publisher login dns google-kms --domain="${MY_DOMAIN}" --resource="projects/${MY_PROJECT}/locations/global/keyRings/${MY_KEYRING}/cryptoKeys/${MY_KEY_NAME}/cryptoKeyVersions/1"

  # 复制“预期证明记录”：
  # ${MY_DOMAIN}. IN TXT "v=MCPv1; k=ed25519; p=${PUBLIC_KEY}"
  ```

  ```bash Azure Key Vault theme={null}
  MY_DOMAIN="example.com"
  MY_SUBSCRIPTION="subscription name or ID"
  MY_RESOURCE_GROUP="MyResourceGroup"
  MY_KEY_VAULT="MyKeyVault"
  MY_KEY_NAME="MyKey"

  # 使用 Azure CLI 登录 (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
  az login

  # 设置默认订阅
  az account set --subscription "${MY_SUBSCRIPTION}"

  # 创建资源组
  az group create --location westus --resource-group "${MY_RESOURCE_GROUP}"

  # 创建密钥保管库
  az keyvault create --name "${MY_KEY_VAULT}" --location westus --resource-group "${MY_RESOURCE_GROUP}"

  # 创建 ECDSA P-384 签名密钥
  az keyvault key create --name "${MY_KEY_NAME}" --vault-name "${MY_KEY_VAULT}" --curve P-384

  # 尝试登录以显示公钥
  mcp-publisher login dns azure-key-vault --domain="${MY_DOMAIN}" --vault "${MY_KEY_VAULT}" --key "${MY_KEY_NAME}"

  # 复制“预期证明记录”：
  # ${MY_DOMAIN}. IN TXT "v=MCPv1; k=ecdsap384; p=${PUBLIC_KEY}"
  ```
</CodeGroup>

然后使用您的 DNS 提供商的控制面板添加 TXT 记录。TXT 记录可能需要几分钟才能传播。TXT 记录传播后，使用 `mcp-publisher login` 命令登录：

<CodeGroup>
  ```bash Ed25519 theme={null}
  MY_DOMAIN="example.com"

  PRIVATE_KEY="$(openssl pkey -in key.pem -noout -text | grep -A3 "priv:" | tail -n +2 | tr -d ' :\n')"
  mcp-publisher login dns --domain "${MY_DOMAIN}" --private-key "${PRIVATE_KEY}"
  ```

  ```bash ECDSA P-384 theme={null}
  MY_DOMAIN="example.com"

  PRIVATE_KEY="$(openssl ec -in key.pem -noout -text | grep -A4 "priv:" | tail -n +2 | tr -d ' :\n')"
  mcp-publisher login dns --domain "${MY_DOMAIN}" --private-key "${PRIVATE_KEY}"
  ```

  ```bash Google KMS theme={null}
  MY_DOMAIN="example.com"
  MY_PROJECT="myproject"
  MY_KEYRING="mykeyring"
  MY_KEY_NAME="mykey"

  mcp-publisher login dns google-kms --domain="${MY_DOMAIN}" --resource="projects/${MY_PROJECT}/locations/global/keyRings/${MY_KEYRING}/cryptoKeys/${MY_KEY_NAME}/cryptoKeyVersions/1"
  ```

  ```bash Azure Key Vault theme={null}
  MY_DOMAIN="example.com"
  MY_KEY_VAULT="MyKeyVault"
  MY_KEY_NAME="MyKey"

  mcp-publisher login dns azure-key-vault --domain="${MY_DOMAIN}" --vault "${MY_KEY_VAULT}" --key "${MY_KEY_NAME}"
  ```
</CodeGroup>

## HTTP 认证

HTTP 认证是一种基于域名的认证方法，依赖于托管在您域上的 `/.well-known/mcp-registry-auth` 文件。例如，`https://example.com/.well-known/mcp-registry-auth`。

要使用 `mcp-publisher` CLI 工具执行 HTTP 认证，请在您的服务器项目目录中运行以下命令，以基于公钥/私钥对生成 `mcp-registry-auth` 文件：

<CodeGroup>
  ```bash Ed25519 theme={null}
  # 使用 Ed25519 生成公钥/私钥对
  openssl genpkey -algorithm Ed25519 -out key.pem

  # 生成 mcp-registry-auth 文件
  PUBLIC_KEY="$(openssl pkey -in key.pem -pubout -outform DER | tail -c 32 | base64)"
  echo "v=MCPv1; k=ed25519; p=${PUBLIC_KEY}" > mcp-registry-auth
  ```

  ```bash ECDSA P-384 theme={null}
  # 使用 ECDSA P-384 生成公钥/私钥对
  openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:secp384r1 -out key.pem

  # 生成 mcp-registry-auth 文件
  PUBLIC_KEY="$(openssl ec -in key.pem -text -noout -conv_form compressed | grep -A4 "pub:" | tail -n +2 | tr -d ' :\n' | xxd -r -p | base64)"
  echo "v=MCPv1; k=ecdsap384; p=${PUBLIC_KEY}" > mcp-registry-auth
  ```

  ```bash Google KMS theme={null}
  MY_DOMAIN="example.com"
  MY_PROJECT="myproject"
  MY_KEYRING="mykeyring"
  MY_KEY_NAME="mykey"

  # 使用 gcloud CLI 登录 (https://cloud.google.com/sdk/docs/install)
  gcloud auth login

  # 设置默认项目
  gcloud config set project "${MY_PROJECT}"

  # 在您的项目中创建密钥环
  gcloud kms keyrings create "${MY_KEYRING}" --location global

  # 创建 Ed25519 签名密钥
  gcloud kms keys create "${MY_KEY_NAME}" --default-algorithm=ec-sign-ed25519 --purpose=asymmetric-signing --keyring="${MY_KEYRING}" --location=global

  # 启用应用默认凭据 (ADC) 以便发布工具可以签名
  gcloud auth application-default login

  # 尝试登录以显示公钥
  mcp-publisher login http google-kms --domain="${MY_DOMAIN}" --resource="projects/${MY_PROJECT}/locations/global/keyRings/${MY_KEYRING}/cryptoKeys/${MY_KEY_NAME}/cryptoKeyVersions/1"

  # 将“预期证明记录”复制到 `./mcp-registry-auth`：
  # v=MCPv1; k=ed25519; p=${PUBLIC_KEY}
  ```

  ```bash Azure Key Vault theme={null}
  MY_DOMAIN="example.com"
  MY_SUBSCRIPTION="subscription name or ID"
  MY_RESOURCE_GROUP="MyResourceGroup"
  MY_KEY_VAULT="MyKeyVault"
  MY_KEY_NAME="MyKey"

  # 使用 Azure CLI 登录 (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
  az login

  # 设置默认订阅
  az account set --subscription "${MY_SUBSCRIPTION}"

  # 创建资源组
  az group create --location westus --resource-group "${MY_RESOURCE_GROUP}"

  # 创建密钥保管库
  az keyvault create --name "${MY_KEY_VAULT}" --location westus --resource-group "${MY_RESOURCE_GROUP}"

  # 创建 ECDSA P-384 签名密钥
  az keyvault key create --name "${MY_KEY_NAME}" --vault-name "${MY_KEY_VAULT}" --curve P-384

  # 尝试登录以显示公钥
  mcp-publisher login http azure-key-vault --domain="${MY_DOMAIN}" --vault "${MY_KEY_VAULT}" --key "${MY_KEY_NAME}"

  # 将“预期证明记录”复制到 `./mcp-registry-auth`：
  # v=MCPv1; k=ecdsap384; p=${PUBLIC_KEY}
  ```
</CodeGroup>

然后将 `mcp-registry-auth` 文件托管在您域上的 `/.well-known/mcp-registry-auth`。文件托管后，使用 `mcp-publisher login` 命令登录：

<CodeGroup>
  ```bash Ed25519 theme={null}
  MY_DOMAIN="example.com"
  PRIVATE_KEY="$(openssl pkey -in key.pem -noout -text | grep -A3 "priv:" | tail -n +2 | tr -d ' :\n')"
  mcp-publisher login http --domain "${MY_DOMAIN}" --private-key "${PRIVATE_KEY}"
  ```

  ```bash ECDSA P-384 theme={null}
  MY_DOMAIN="example.com"
  PRIVATE_KEY="$(openssl ec -in key.pem -noout -text | grep -A4 "priv:" | tail -n +2 | tr -d ' :\n')"
  mcp-publisher login http --domain "${MY_DOMAIN}" --private-key "${PRIVATE_KEY}"
  ```

  ```bash Google KMS theme={null}
  MY_DOMAIN="example.com"
  MY_PROJECT="myproject"
  MY_KEYRING="mykeyring"
  MY_KEY_NAME="mykey"

  mcp-publisher login http google-kms --domain="${MY_DOMAIN}" --resource="projects/${MY_PROJECT}/locations/global/keyRings/${MY_KEYRING}/cryptoKeys/${MY_KEY_NAME}/cryptoKeyVersions/1"
  ```

  ```bash Azure Key Vault theme={null}
  MY_DOMAIN="example.com"
  MY_KEY_VAULT="MyKeyVault"
  MY_KEY_NAME="MyKey"

  mcp-publisher login http azure-key-vault --domain="${MY_DOMAIN}" --vault "${MY_KEY_VAULT}" --key "${MY_KEY_NAME}"
  ```
</CodeGroup>
