Follow Discord
Sweep 22 Oct 2026 · 21:04Z Build v2.1.309 528 read Stable v2.1.308 Latest v2.1.309 Next v2.1.309 Feeds RSS JSON llms.txt llms-full.txt Unofficial
One capture · mcp

One read of Model Context Protocolmcp-20261020T200724Z

306 pages moved out of 357 read.

Pages moved 306 significant first
Pages read 357 in this capture
Captured 20:07 UTC
Corpus hash 077a51951f96 corpus-hash

What this read moved

126-150 of 306, page 6 of 13

This capture is too large to show at once. Changes 126-150 of 306 are below, significant first; the rest are on the following screens.

extensions/skills/overview Changed · +15 / -15 lines

from line 12
1212[implementations list](https://github.com/modelcontextprotocol/ext-skills/blob/main/docs/implementations.md)
1313for current coverage.
1414 
15<Card title="modelcontextprotocol/ext-skills" icon="github" href="https://github.com/modelcontextprotocol/ext-skills">
16 Specification and documentation for Skills over MCP.
17</Card>
15> **[modelcontextprotocol/ext-skills](https://github.com/modelcontextprotocol/ext-skills)**
16>
17> Specification and documentation for Skills over MCP.
1818 
1919The Skills extension allows MCP servers to expose workflow instructions and
2020supporting files to clients. Clients can discover available skills, retrieve
from line 68
6868indicates support without directory reading. Clients issue `skills/list` and
6969`skills/get` only after observing the server's declaration.
7070 
71<Note>
72 These examples use protocol revision `2026-07-28` or later. For brevity, the
73 request examples omit `_meta`. Every request **MUST** include the required
74 [request metadata](/specification/draft/basic/index#_meta).
75</Note>
71> [!NOTE]
72>
73> These examples use protocol revision `2026-07-28` or later. For brevity, the
74> request examples omit `_meta`. Every request **MUST** include the required
75> [request metadata](/specification/draft/basic/index#_meta).
7676 
7777## Protocol Messages
7878 
from line 372
372372files from filesystem-skill discovery paths and preserve their MCP origin,
373373including after a restart.
374374 
375<Note>
376 Digests establish consistency with the server's manifest, not trust in its
377 content. For generated content without stable digests, an entry uses
378 `"resources": "dynamic"`. Hosts **MAY** decline these skills. If accepted,
379 hosts **MUST** still verify frontmatter and **MUST NOT** treat persisted
380 approval as covering arbitrary future content.
381</Note>
375> [!NOTE]
376>
377> Digests establish consistency with the server's manifest, not trust in its
378> content. For generated content without stable digests, an entry uses
379> `"resources": "dynamic"`. Hosts **MAY** decline these skills. If accepted,
380> hosts **MUST** still verify frontmatter and **MUST NOT** treat persisted
381> approval as covering arbitrary future content.
382382 
383383## Implementation Requirements
384384 

extensions/tasks/overview Changed · +92 / -96 lines

from line 4
44 
55The [ext-tasks repository](https://github.com/modelcontextprotocol/ext-tasks) contains the full specification and documentation for MCP Tasks.
66 
7<Card title="modelcontextprotocol/ext-tasks" icon="github" href="https://github.com/modelcontextprotocol/ext-tasks">
8 Full specification and documentation for MCP Tasks.
9</Card>
7> **[modelcontextprotocol/ext-tasks](https://github.com/modelcontextprotocol/ext-tasks)**
8>
9> Full specification and documentation for MCP Tasks.
1010 
1111Not every tool call returns instantly. Some operations — CI pipelines, batch
1212processing, human approvals — take seconds, minutes, or longer. MCP Tasks let
from line 144
144144 
145145To consume task-augmented responses, your client must:
146146 
147<Steps>
148 <Step title="Declare support">
149 Include the extension in its per-request capabilities:
147**1. Declare support**
150148 
151 ```jsonc theme={null}
152 {
153 "jsonrpc": "2.0",
154 "id": 1,
155 "method": "...",
156 "params": {
157 // Other fields...
158 "_meta": {
159 // Other fields...
160 "io.modelcontextprotocol/clientCapabilities": {
161 "extensions": {
162 "io.modelcontextprotocol/tasks": {},
163 },
164 },
149Include the extension in its per-request capabilities:
150 
151```jsonc theme={null}
152{
153 "jsonrpc": "2.0",
154 "id": 1,
155 "method": "...",
156 "params": {
157 // Other fields...
158 "_meta": {
159 // Other fields...
160 "io.modelcontextprotocol/clientCapabilities": {
161 "extensions": {
162 "io.modelcontextprotocol/tasks": {},
165163 },
166164 },
167 }
168 ```
169 </Step>
165 },
166 },
167}
168```
170169 
171 <Step title="Handle polymorphic results">
172 When issuing a supported request (e.g., `tools/call`), be prepared to receive
173 either the standard result or a `CreateTaskResult` with `resultType: "task"`.
174 </Step>
170**2. Handle polymorphic results**
175171 
176 <Step title="Poll for completion">
177 Call `tasks/get` with the returned `taskId`, respecting the `pollIntervalMs`
178 value. Continue polling until the task reaches a terminal status (`completed`,
179 `failed`, or `cancelled`).
180 </Step>
172When issuing a supported request (e.g., `tools/call`), be prepared to receive
173either the standard result or a `CreateTaskResult` with `resultType: "task"`.
181174 
182 <Step title="Handle input requests">
183 If the task status is `input_required`, read the `inputRequests` map, present
184 the requests to the user or model, and submit responses via `tasks/update`.
185 </Step>
175**3. Poll for completion**
186176 
187 <Step title="Persist task IDs">
188 Store task IDs durably so polling can resume after a client crash or restart.
189 </Step>
190</Steps>
177Call `tasks/get` with the returned `taskId`, respecting the `pollIntervalMs`
178value. Continue polling until the task reaches a terminal status (`completed`,
179`failed`, or `cancelled`).
191180 
181**4. Handle input requests**
182 
183If the task status is `input_required`, read the `inputRequests` map, present
184the requests to the user or model, and submit responses via `tasks/update`.
185 
186**5. Persist task IDs**
187 
188Store task IDs durably so polling can resume after a client crash or restart.
189 
192190### For MCP servers
193191 
194192To return tasks from your server:
195193 
196<Steps>
197 <Step title="Advertise support">
198 Include the extension in your `server/discover` capabilities:
194**1. Advertise support**
199195 
200 ```jsonc theme={null}
201 {
202 "jsonrpc": "2.0",
203 "id": 1,
204 "result": {
205 // Other fields...
206 "capabilities": {
207 "extensions": {
208 "io.modelcontextprotocol/tasks": {},
209 },
210 },
196Include the extension in your `server/discover` capabilities:
197 
198```jsonc theme={null}
199{
200 "jsonrpc": "2.0",
201 "id": 1,
202 "result": {
203 // Other fields...
204 "capabilities": {
205 "extensions": {
206 "io.modelcontextprotocol/tasks": {},
211207 },
212 }
213 ```
214 </Step>
208 },
209 },
210}
211```
215212 
216 <Step title="Check client capabilities">
217 Before returning a `CreateTaskResult`, verify that the client included the
218 extension in its per-request capabilities. Never return a task to a client that
219 did not declare support.
220 </Step>
213**2. Check client capabilities**
221214 
222 <Step title="Return CreateTaskResult">
223 When a request will be long-running, respond with `resultType: "task"` and a
224 `Task` object containing a unique `taskId`, initial status, `ttlMs`, and
225 `pollIntervalMs`. The task must be durably created before sending the response.
226 </Step>
215Before returning a `CreateTaskResult`, verify that the client included the
216extension in its per-request capabilities. Never return a task to a client that
217did not declare support.
227218 
228 <Step title="Serve tasks/get">
229 Return the current task state on each poll. For terminal states, include the
230 `result` (on `completed`) or `error` (on `failed`) field.
231 </Step>
219**3. Return CreateTaskResult**
232220 
233 <Step title="Handle tasks/update">
234 Accept `inputResponses` keyed to outstanding `inputRequests`. Acknowledge with
235 an empty result. Ignore responses for unknown or already-satisfied keys.
236 </Step>
221When a request will be long-running, respond with `resultType: "task"` and a
222`Task` object containing a unique `taskId`, initial status, `ttlMs`, and
223`pollIntervalMs`. The task must be durably created before sending the response.
237224 
238 <Step title="Handle tasks/cancel">
239 Acknowledge cancellation requests with an empty result. Honor them when
240 possible, but cancellation is cooperative — the task may still reach a
241 non-`cancelled` terminal status.
242 </Step>
243</Steps>
225**4. Serve tasks/get**
244226 
227Return the current task state on each poll. For terminal states, include the
228`result` (on `completed`) or `error` (on `failed`) field.
229 
230**5. Handle tasks/update**
231 
232Accept `inputResponses` keyed to outstanding `inputRequests`. Acknowledge with
233an empty result. Ignore responses for unknown or already-satisfied keys.
234 
235**6. Handle tasks/cancel**
236 
237Acknowledge cancellation requests with an empty result. Honor them when
238possible, but cancellation is cooperative — the task may still reach a
239non-`cancelled` terminal status.
240 
245241## Client support
246242 
247<Note>
248 MCP Tasks is an extension to the [core MCP specification](/specification/latest). Host
249 support varies by client.
250</Note>
243> [!NOTE]
244>
245> MCP Tasks is an extension to the [core MCP specification](/specification/latest). Host
246> support varies by client.
251247 
252248See the [client matrix](/extensions/client-matrix) for extension support across
253249clients. Task support requires explicit opt-in from both client and server.

registry/about Changed · +4 / -4 lines

from line 1
11# The MCP Registry
22 
3<Note>
4 The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
5</Note>
3> [!NOTE]
4>
5> The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
66 
77The MCP Registry is the official centralized metadata repository for publicly accessible MCP servers, backed by major trusted contributors to the MCP ecosystem such as Anthropic, GitHub, PulseMCP, and Microsoft.
88 
from line 24
2424 
2525The MCP Registry is part of an ecosystem that looks something like:
2626 
27<img src="https://mintcdn.com/mcp/jWyXLg8iLYJ-g6Lo/registry/ecosystem-diagram.excalidraw.svg?fit=max&auto=format&n=jWyXLg8iLYJ-g6Lo&q=85&s=06fcebbf5a33d3ef1fed72279f01f321" alt="The MCP Registry ecosystem" width="2787" height="1811" data-path="registry/ecosystem-diagram.excalidraw.svg" />
27![The MCP Registry ecosystem](https://mintcdn.com/mcp/jWyXLg8iLYJ-g6Lo/registry/ecosystem-diagram.excalidraw.svg?fit=max\&auto=format\&n=jWyXLg8iLYJ-g6Lo\&q=85\&s=06fcebbf5a33d3ef1fed72279f01f321)
2828 
2929### Relationship with Package Registries
3030 

registry/authentication Changed · +213 / -221 lines

from line 1
11# How to Authenticate When Publishing to the Official MCP Registry
22 
3<Note>
4 The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
5</Note>
3> [!NOTE]
4>
5> The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
66 
77You must authenticate before publishing to the official MCP Registry. The MCP Registry supports different authentication methods. Which authentication method you choose determines the namespace of your server's name.
88 
from line 50
5050 
5151To perform DNS authentication using the `mcp-publisher` CLI tool, run the following commands in your server project directory to generate a TXT record based on a public/private key pair:
5252 
53<CodeGroup>
54 ```bash Ed25519 theme={null}
55 MY_DOMAIN="example.com"
53```bash Ed25519 theme={null}
54MY_DOMAIN="example.com"
5655 
57 # Generate public/private key pair using Ed25519
58 openssl genpkey -algorithm Ed25519 -out key.pem
56# Generate public/private key pair using Ed25519
57openssl genpkey -algorithm Ed25519 -out key.pem
5958 
60 # Generate TXT record
61 PUBLIC_KEY="$(openssl pkey -in key.pem -pubout -outform DER | tail -c 32 | base64)"
62 echo "${MY_DOMAIN}. IN TXT \"v=MCPv1; k=ed25519; p=${PUBLIC_KEY}\""
63 ```
59# Generate TXT record
60PUBLIC_KEY="$(openssl pkey -in key.pem -pubout -outform DER | tail -c 32 | base64)"
61echo "${MY_DOMAIN}. IN TXT \"v=MCPv1; k=ed25519; p=${PUBLIC_KEY}\""
62```
6463 
65 ```bash ECDSA P-384 theme={null}
66 MY_DOMAIN="example.com"
64```bash ECDSA P-384 theme={null}
65MY_DOMAIN="example.com"
6766 
68 # Generate public/private key pair using ECDSA P-384
69 openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:secp384r1 -out key.pem
67# Generate public/private key pair using ECDSA P-384
68openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:secp384r1 -out key.pem
7069 
71 # Generate TXT record
72 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)"
73 echo "${MY_DOMAIN}. IN TXT \"v=MCPv1; k=ecdsap384; p=${PUBLIC_KEY}\""
74 ```
70# Generate TXT record
71PUBLIC_KEY="$(openssl ec -in key.pem -text -noout -conv_form compressed | grep -A4 "pub:" | tail -n +2 | tr -d ' :\n' | xxd -r -p | base64)"
72echo "${MY_DOMAIN}. IN TXT \"v=MCPv1; k=ecdsap384; p=${PUBLIC_KEY}\""
73```
7574 
76 ```bash Google KMS theme={null}
77 MY_DOMAIN="example.com"
78 MY_PROJECT="myproject"
79 MY_KEYRING="mykeyring"
80 MY_KEY_NAME="mykey"
75```bash Google KMS theme={null}
76MY_DOMAIN="example.com"
77MY_PROJECT="myproject"
78MY_KEYRING="mykeyring"
79MY_KEY_NAME="mykey"
8180 
82 # Log in using gcloud CLI (https://cloud.google.com/sdk/docs/install)
83 gcloud auth login
81# Log in using gcloud CLI (https://cloud.google.com/sdk/docs/install)
82gcloud auth login
8483 
85 # Set default project
86 gcloud config set project "${MY_PROJECT}"
84# Set default project
85gcloud config set project "${MY_PROJECT}"
8786 
88 # Create a keyring in your project
89 gcloud kms keyrings create "${MY_KEYRING}" --location global
87# Create a keyring in your project
88gcloud kms keyrings create "${MY_KEYRING}" --location global
9089 
91 # Create an Ed25519 signing key
92 gcloud kms keys create "${MY_KEY_NAME}" --default-algorithm=ec-sign-ed25519 --purpose=asymmetric-signing --keyring="${MY_KEYRING}" --location=global
90# Create an Ed25519 signing key
91gcloud kms keys create "${MY_KEY_NAME}" --default-algorithm=ec-sign-ed25519 --purpose=asymmetric-signing --keyring="${MY_KEYRING}" --location=global
9392 
94 # Enable Application Default Credentials (ADC) so the publisher tool can sign
95 gcloud auth application-default login
93# Enable Application Default Credentials (ADC) so the publisher tool can sign
94gcloud auth application-default login
9695 
97 # Attempt login to show the public key
98 mcp-publisher login dns google-kms --domain="${MY_DOMAIN}" --resource="projects/${MY_PROJECT}/locations/global/keyRings/${MY_KEYRING}/cryptoKeys/${MY_KEY_NAME}/cryptoKeyVersions/1"
96# Attempt login to show the public key
97mcp-publisher login dns google-kms --domain="${MY_DOMAIN}" --resource="projects/${MY_PROJECT}/locations/global/keyRings/${MY_KEYRING}/cryptoKeys/${MY_KEY_NAME}/cryptoKeyVersions/1"
9998 
100 # Copy the "Expected proof record":
101 # ${MY_DOMAIN}. IN TXT "v=MCPv1; k=ed25519; p=${PUBLIC_KEY}"
102 ```
99# Copy the "Expected proof record":
100# ${MY_DOMAIN}. IN TXT "v=MCPv1; k=ed25519; p=${PUBLIC_KEY}"
101```
103102 
104 ```bash Azure Key Vault theme={null}
105 MY_DOMAIN="example.com"
106 MY_SUBSCRIPTION="subscription name or ID"
107 MY_RESOURCE_GROUP="MyResourceGroup"
108 MY_KEY_VAULT="MyKeyVault"
109 MY_KEY_NAME="MyKey"
103```bash Azure Key Vault theme={null}
104MY_DOMAIN="example.com"
105MY_SUBSCRIPTION="subscription name or ID"
106MY_RESOURCE_GROUP="MyResourceGroup"
107MY_KEY_VAULT="MyKeyVault"
108MY_KEY_NAME="MyKey"
110109 
111 # Log in using Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
112 az login
110# Log in using Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
111az login
113112 
114 # Set default subscription
115 az account set --subscription "${MY_SUBSCRIPTION}"
113# Set default subscription
114az account set --subscription "${MY_SUBSCRIPTION}"
116115 
117 # Create a resource group
118 az group create --location westus --resource-group "${MY_RESOURCE_GROUP}"
116# Create a resource group
117az group create --location westus --resource-group "${MY_RESOURCE_GROUP}"
119118 
120 # Create a key vault
121 az keyvault create --name "${MY_KEY_VAULT}" --location westus --resource-group "${MY_RESOURCE_GROUP}"
119# Create a key vault
120az keyvault create --name "${MY_KEY_VAULT}" --location westus --resource-group "${MY_RESOURCE_GROUP}"
122121 
123 # Create an ECDSA P-384 signing key
124 az keyvault key create --name "${MY_KEY_NAME}" --vault-name "${MY_KEY_VAULT}" --curve P-384
122# Create an ECDSA P-384 signing key
123az keyvault key create --name "${MY_KEY_NAME}" --vault-name "${MY_KEY_VAULT}" --curve P-384
125124 
126 # Attempt login to show the public key
127 mcp-publisher login dns azure-key-vault --domain="${MY_DOMAIN}" --vault "${MY_KEY_VAULT}" --key "${MY_KEY_NAME}"
125# Attempt login to show the public key
126mcp-publisher login dns azure-key-vault --domain="${MY_DOMAIN}" --vault "${MY_KEY_VAULT}" --key "${MY_KEY_NAME}"
128127 
129 # Copy the "Expected proof record":
130 # ${MY_DOMAIN}. IN TXT "v=MCPv1; k=ecdsap384; p=${PUBLIC_KEY}"
131 ```
132</CodeGroup>
128# Copy the "Expected proof record":
129# ${MY_DOMAIN}. IN TXT "v=MCPv1; k=ecdsap384; p=${PUBLIC_KEY}"
130```
133131 
134132Then add the TXT record using your DNS provider's control panel. It may take several minutes for the TXT record to propagate. After the TXT record has propagated, log in using the `mcp-publisher login` command:
135133 
136<CodeGroup>
137 ```bash Ed25519 theme={null}
138 MY_DOMAIN="example.com"
134```bash Ed25519 theme={null}
135MY_DOMAIN="example.com"
139136 
140 PRIVATE_KEY="$(openssl pkey -in key.pem -noout -text | grep -A3 "priv:" | tail -n +2 | tr -d ' :\n')"
141 mcp-publisher login dns --domain "${MY_DOMAIN}" --private-key "${PRIVATE_KEY}"
142 ```
137PRIVATE_KEY="$(openssl pkey -in key.pem -noout -text | grep -A3 "priv:" | tail -n +2 | tr -d ' :\n')"
138mcp-publisher login dns --domain "${MY_DOMAIN}" --private-key "${PRIVATE_KEY}"
139```
143140 
144 ```bash ECDSA P-384 theme={null}
145 MY_DOMAIN="example.com"
141```bash ECDSA P-384 theme={null}
142MY_DOMAIN="example.com"
146143 
147 PRIVATE_KEY="$(openssl ec -in key.pem -noout -text | grep -A4 "priv:" | tail -n +2 | tr -d ' :\n')"
148 mcp-publisher login dns --domain "${MY_DOMAIN}" --private-key "${PRIVATE_KEY}"
149 ```
144PRIVATE_KEY="$(openssl ec -in key.pem -noout -text | grep -A4 "priv:" | tail -n +2 | tr -d ' :\n')"
145mcp-publisher login dns --domain "${MY_DOMAIN}" --private-key "${PRIVATE_KEY}"
146```
150147 
151 ```bash Google KMS theme={null}
152 MY_DOMAIN="example.com"
153 MY_PROJECT="myproject"
154 MY_KEYRING="mykeyring"
155 MY_KEY_NAME="mykey"
148```bash Google KMS theme={null}
149MY_DOMAIN="example.com"
150MY_PROJECT="myproject"
151MY_KEYRING="mykeyring"
152MY_KEY_NAME="mykey"
156153 
157 mcp-publisher login dns google-kms --domain="${MY_DOMAIN}" --resource="projects/${MY_PROJECT}/locations/global/keyRings/${MY_KEYRING}/cryptoKeys/${MY_KEY_NAME}/cryptoKeyVersions/1"
158 ```
154mcp-publisher login dns google-kms --domain="${MY_DOMAIN}" --resource="projects/${MY_PROJECT}/locations/global/keyRings/${MY_KEYRING}/cryptoKeys/${MY_KEY_NAME}/cryptoKeyVersions/1"
155```
159156 
160 ```bash Azure Key Vault theme={null}
161 MY_DOMAIN="example.com"
162 MY_KEY_VAULT="MyKeyVault"
163 MY_KEY_NAME="MyKey"
157```bash Azure Key Vault theme={null}
158MY_DOMAIN="example.com"
159MY_KEY_VAULT="MyKeyVault"
160MY_KEY_NAME="MyKey"
164161 
165 mcp-publisher login dns azure-key-vault --domain="${MY_DOMAIN}" --vault "${MY_KEY_VAULT}" --key "${MY_KEY_NAME}"
166 ```
167</CodeGroup>
162mcp-publisher login dns azure-key-vault --domain="${MY_DOMAIN}" --vault "${MY_KEY_VAULT}" --key "${MY_KEY_NAME}"
163```
168164 
169165## HTTP Authentication
170166 
from line 168
172168 
173169To perform HTTP authentication using the `mcp-publisher` CLI tool, run the following commands in your server project directory to generate an `mcp-registry-auth` file based on a public/private key pair:
174170 
175<CodeGroup>
176 ```bash Ed25519 theme={null}
177 # Generate public/private key pair using Ed25519
178 openssl genpkey -algorithm Ed25519 -out key.pem
171```bash Ed25519 theme={null}
172# Generate public/private key pair using Ed25519
173openssl genpkey -algorithm Ed25519 -out key.pem
179174 
180 # Generate mcp-registry-auth file
181 PUBLIC_KEY="$(openssl pkey -in key.pem -pubout -outform DER | tail -c 32 | base64)"
182 echo "v=MCPv1; k=ed25519; p=${PUBLIC_KEY}" > mcp-registry-auth
183 ```
175# Generate mcp-registry-auth file
176PUBLIC_KEY="$(openssl pkey -in key.pem -pubout -outform DER | tail -c 32 | base64)"
177echo "v=MCPv1; k=ed25519; p=${PUBLIC_KEY}" > mcp-registry-auth
178```
184179 
185 ```bash ECDSA P-384 theme={null}
186 # Generate public/private key pair using ECDSA P-384
187 openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:secp384r1 -out key.pem
180```bash ECDSA P-384 theme={null}
181# Generate public/private key pair using ECDSA P-384
182openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:secp384r1 -out key.pem
188183 
189 # Generate mcp-registry-auth file
190 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)"
191 echo "v=MCPv1; k=ecdsap384; p=${PUBLIC_KEY}" > mcp-registry-auth
192 ```
184# Generate mcp-registry-auth file
185PUBLIC_KEY="$(openssl ec -in key.pem -text -noout -conv_form compressed | grep -A4 "pub:" | tail -n +2 | tr -d ' :\n' | xxd -r -p | base64)"
186echo "v=MCPv1; k=ecdsap384; p=${PUBLIC_KEY}" > mcp-registry-auth
187```
193188 
194 ```bash Google KMS theme={null}
195 MY_DOMAIN="example.com"
196 MY_PROJECT="myproject"
197 MY_KEYRING="mykeyring"
198 MY_KEY_NAME="mykey"
189```bash Google KMS theme={null}
190MY_DOMAIN="example.com"
191MY_PROJECT="myproject"
192MY_KEYRING="mykeyring"
193MY_KEY_NAME="mykey"
199194 
200 # Log in using gcloud CLI (https://cloud.google.com/sdk/docs/install)
201 gcloud auth login
195# Log in using gcloud CLI (https://cloud.google.com/sdk/docs/install)
196gcloud auth login
202197 
203 # Set default project
204 gcloud config set project "${MY_PROJECT}"
198# Set default project
199gcloud config set project "${MY_PROJECT}"
205200 
206 # Create a keyring in your project
207 gcloud kms keyrings create "${MY_KEYRING}" --location global
201# Create a keyring in your project
202gcloud kms keyrings create "${MY_KEYRING}" --location global
208203 
209 # Create an Ed25519 signing key
210 gcloud kms keys create "${MY_KEY_NAME}" --default-algorithm=ec-sign-ed25519 --purpose=asymmetric-signing --keyring="${MY_KEYRING}" --location=global
204# Create an Ed25519 signing key
205gcloud kms keys create "${MY_KEY_NAME}" --default-algorithm=ec-sign-ed25519 --purpose=asymmetric-signing --keyring="${MY_KEYRING}" --location=global
211206 
212 # Enable Application Default Credentials (ADC) so the publisher tool can sign
213 gcloud auth application-default login
207# Enable Application Default Credentials (ADC) so the publisher tool can sign
208gcloud auth application-default login
214209 
215 # Attempt login to show the public key
216 mcp-publisher login http google-kms --domain="${MY_DOMAIN}" --resource="projects/${MY_PROJECT}/locations/global/keyRings/${MY_KEYRING}/cryptoKeys/${MY_KEY_NAME}/cryptoKeyVersions/1"
210# Attempt login to show the public key
211mcp-publisher login http google-kms --domain="${MY_DOMAIN}" --resource="projects/${MY_PROJECT}/locations/global/keyRings/${MY_KEYRING}/cryptoKeys/${MY_KEY_NAME}/cryptoKeyVersions/1"
217212 
218 # Copy the "Expected proof record" to `./mcp-registry-auth`:
219 # v=MCPv1; k=ed25519; p=${PUBLIC_KEY}
220 ```
213# Copy the "Expected proof record" to `./mcp-registry-auth`:
214# v=MCPv1; k=ed25519; p=${PUBLIC_KEY}
215```
221216 
222 ```bash Azure Key Vault theme={null}
223 MY_DOMAIN="example.com"
224 MY_SUBSCRIPTION="subscription name or ID"
225 MY_RESOURCE_GROUP="MyResourceGroup"
226 MY_KEY_VAULT="MyKeyVault"
227 MY_KEY_NAME="MyKey"
217```bash Azure Key Vault theme={null}
218MY_DOMAIN="example.com"
219MY_SUBSCRIPTION="subscription name or ID"
220MY_RESOURCE_GROUP="MyResourceGroup"
221MY_KEY_VAULT="MyKeyVault"
222MY_KEY_NAME="MyKey"
228223 
229 # Log in using Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
230 az login
224# Log in using Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
225az login
231226 
232 # Set default subscription
233 az account set --subscription "${MY_SUBSCRIPTION}"
227# Set default subscription
228az account set --subscription "${MY_SUBSCRIPTION}"
234229 
235 # Create a resource group
236 az group create --location westus --resource-group "${MY_RESOURCE_GROUP}"
230# Create a resource group
231az group create --location westus --resource-group "${MY_RESOURCE_GROUP}"
237232 
238 # Create a key vault
239 az keyvault create --name "${MY_KEY_VAULT}" --location westus --resource-group "${MY_RESOURCE_GROUP}"
233# Create a key vault
234az keyvault create --name "${MY_KEY_VAULT}" --location westus --resource-group "${MY_RESOURCE_GROUP}"
240235 
241 # Create an ECDSA P-384 signing key
242 az keyvault key create --name "${MY_KEY_NAME}" --vault-name "${MY_KEY_VAULT}" --curve P-384
236# Create an ECDSA P-384 signing key
237az keyvault key create --name "${MY_KEY_NAME}" --vault-name "${MY_KEY_VAULT}" --curve P-384
243238 
244 # Attempt login to show the public key
245 mcp-publisher login http azure-key-vault --domain="${MY_DOMAIN}" --vault "${MY_KEY_VAULT}" --key "${MY_KEY_NAME}"
239# Attempt login to show the public key
240mcp-publisher login http azure-key-vault --domain="${MY_DOMAIN}" --vault "${MY_KEY_VAULT}" --key "${MY_KEY_NAME}"
246241 
247 # Copy the "Expected proof record" to `./mcp-registry-auth`:
248 # v=MCPv1; k=ecdsap384; p=${PUBLIC_KEY}
249 ```
250</CodeGroup>
242# Copy the "Expected proof record" to `./mcp-registry-auth`:
243# v=MCPv1; k=ecdsap384; p=${PUBLIC_KEY}
244```
251245 
252246Then host the `mcp-registry-auth` file at `/.well-known/mcp-registry-auth` on your domain. After the file is hosted, log in using the `mcp-publisher login` command:
253247 
254<CodeGroup>
255 ```bash Ed25519 theme={null}
256 MY_DOMAIN="example.com"
257 PRIVATE_KEY="$(openssl pkey -in key.pem -noout -text | grep -A3 "priv:" | tail -n +2 | tr -d ' :\n')"
258 mcp-publisher login http --domain "${MY_DOMAIN}" --private-key "${PRIVATE_KEY}"
259 ```
248```bash Ed25519 theme={null}
249MY_DOMAIN="example.com"
250PRIVATE_KEY="$(openssl pkey -in key.pem -noout -text | grep -A3 "priv:" | tail -n +2 | tr -d ' :\n')"
251mcp-publisher login http --domain "${MY_DOMAIN}" --private-key "${PRIVATE_KEY}"
252```
260253 
261 ```bash ECDSA P-384 theme={null}
262 MY_DOMAIN="example.com"
263 PRIVATE_KEY="$(openssl ec -in key.pem -noout -text | grep -A4 "priv:" | tail -n +2 | tr -d ' :\n')"
264 mcp-publisher login http --domain "${MY_DOMAIN}" --private-key "${PRIVATE_KEY}"
265 ```
254```bash ECDSA P-384 theme={null}
255MY_DOMAIN="example.com"
256PRIVATE_KEY="$(openssl ec -in key.pem -noout -text | grep -A4 "priv:" | tail -n +2 | tr -d ' :\n')"
257mcp-publisher login http --domain "${MY_DOMAIN}" --private-key "${PRIVATE_KEY}"
258```
266259 
267 ```bash Google KMS theme={null}
268 MY_DOMAIN="example.com"
269 MY_PROJECT="myproject"
270 MY_KEYRING="mykeyring"
271 MY_KEY_NAME="mykey"
260```bash Google KMS theme={null}
261MY_DOMAIN="example.com"
262MY_PROJECT="myproject"
263MY_KEYRING="mykeyring"
264MY_KEY_NAME="mykey"
272265 
273 mcp-publisher login http google-kms --domain="${MY_DOMAIN}" --resource="projects/${MY_PROJECT}/locations/global/keyRings/${MY_KEYRING}/cryptoKeys/${MY_KEY_NAME}/cryptoKeyVersions/1"
274 ```
266mcp-publisher login http google-kms --domain="${MY_DOMAIN}" --resource="projects/${MY_PROJECT}/locations/global/keyRings/${MY_KEYRING}/cryptoKeys/${MY_KEY_NAME}/cryptoKeyVersions/1"
267```
275268 
276 ```bash Azure Key Vault theme={null}
277 MY_DOMAIN="example.com"
278 MY_KEY_VAULT="MyKeyVault"
279 MY_KEY_NAME="MyKey"
269```bash Azure Key Vault theme={null}
270MY_DOMAIN="example.com"
271MY_KEY_VAULT="MyKeyVault"
272MY_KEY_NAME="MyKey"
280273 
281 mcp-publisher login http azure-key-vault --domain="${MY_DOMAIN}" --vault "${MY_KEY_VAULT}" --key "${MY_KEY_NAME}"
282 ```
283</CodeGroup>
274mcp-publisher login http azure-key-vault --domain="${MY_DOMAIN}" --vault "${MY_KEY_VAULT}" --key "${MY_KEY_NAME}"
275```
284276 

registry/faq Changed · +6 / -6 lines

from line 1
11# Frequently Asked Questions
22 
3<Note>
4 The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
5</Note>
3> [!NOTE]
4>
5> The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
66 
77## General
88 
from line 25
2525 
2626Yes, custom metadata under `_meta.io.modelcontextprotocol.registry/publisher-provided` is preserved when publishing to the registry. This allows you to include custom metadata specific to your publishing process.
2727 
28<Warning>
29 There is a 4KB size limit (4096 bytes of JSON). Publishing will fail if this limit is exceeded.
30</Warning>
28> [!WARNING]
29>
30> There is a 4KB size limit (4096 bytes of JSON). Publishing will fail if this limit is exceeded.
3131 
3232## Reporting Issues
3333 

registry/github-actions Changed · +177 / -179 lines

from line 1
11# How to Automate Publishing with GitHub Actions
22 
3<Note>
4 The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
5</Note>
3> [!NOTE]
4>
5> The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
66 
77## Step 1: Create a Workflow File
88 
99In your server project directory, create a `.github/workflows/publish-mcp.yml` file. Here is an example for npm-based local server, but the MCP Registry publishing steps are the same for all package types:
1010 
11<CodeGroup>
12 ```yaml OIDC authentication (recommended) theme={null}
13 name: Publish to MCP Registry
11```yaml OIDC authentication (recommended) theme={null}
12name: Publish to MCP Registry
1413 
15 on:
16 push:
17 tags: ["v*"] # Triggers on version tags like v1.0.0
14on:
15 push:
16 tags: ["v*"] # Triggers on version tags like v1.0.0
1817 
19 jobs:
20 publish:
21 runs-on: ubuntu-latest
22 permissions:
23 id-token: write # Required for OIDC authentication
24 contents: read
18jobs:
19 publish:
20 runs-on: ubuntu-latest
21 permissions:
22 id-token: write # Required for OIDC authentication
23 contents: read
2524 
26 steps:
27 - name: Checkout code
28 uses: actions/checkout@v5
25 steps:
26 - name: Checkout code
27 uses: actions/checkout@v5
2928 
30 ### Publish underlying npm package:
29 ### Publish underlying npm package:
3130 
32 - name: Set up Node.js
33 uses: actions/setup-node@v5
34 with:
35 node-version: "lts/*"
31 - name: Set up Node.js
32 uses: actions/setup-node@v5
33 with:
34 node-version: "lts/*"
3635 
37 - name: Install dependencies
38 run: npm ci
36 - name: Install dependencies
37 run: npm ci
3938 
40 - name: Run tests
41 run: npm run test --if-present
39 - name: Run tests
40 run: npm run test --if-present
4241 
43 - name: Build package
44 run: npm run build --if-present
42 - name: Build package
43 run: npm run build --if-present
4544 
46 - name: Publish package to npm
47 run: npm publish
48 env:
49 NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
45 - name: Publish package to npm
46 run: npm publish
47 env:
48 NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
5049 
51 ### Publish MCP server:
50 ### Publish MCP server:
5251 
53 - name: Install mcp-publisher
54 run: |
55 curl -L "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher
52 - name: Install mcp-publisher
53 run: |
54 curl -L "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher
5655 
57 - name: Authenticate to MCP Registry
58 run: ./mcp-publisher login github-oidc
56 - name: Authenticate to MCP Registry
57 run: ./mcp-publisher login github-oidc
5958 
60 # Optional:
61 # - name: Set version in server.json
62 # run: |
63 # VERSION=${GITHUB_REF#refs/tags/v}
64 # jq --arg v "$VERSION" '.version = $v' server.json > server.tmp && mv server.tmp server.json
59 # Optional:
60 # - name: Set version in server.json
61 # run: |
62 # VERSION=${GITHUB_REF#refs/tags/v}
63 # jq --arg v "$VERSION" '.version = $v' server.json > server.tmp && mv server.tmp server.json
6564 
66 - name: Publish server to MCP Registry
67 run: ./mcp-publisher publish
68 ```
65 - name: Publish server to MCP Registry
66 run: ./mcp-publisher publish
67```
6968 
70 ```yaml PAT authentication theme={null}
71 name: Publish to MCP Registry
69```yaml PAT authentication theme={null}
70name: Publish to MCP Registry
7271 
73 on:
74 push:
75 tags: ["v*"] # Triggers on version tags like v1.0.0
72on:
73 push:
74 tags: ["v*"] # Triggers on version tags like v1.0.0
7675 
77 jobs:
78 publish:
79 runs-on: ubuntu-latest
80 permissions:
81 contents: read
76jobs:
77 publish:
78 runs-on: ubuntu-latest
79 permissions:
80 contents: read
8281 
83 steps:
84 - name: Checkout code
85 uses: actions/checkout@v5
82 steps:
83 - name: Checkout code
84 uses: actions/checkout@v5
8685 
87 ### Publish underlying npm package:
86 ### Publish underlying npm package:
8887 
89 - name: Set up Node.js
90 uses: actions/setup-node@v5
91 with:
92 node-version: "lts/*"
88 - name: Set up Node.js
89 uses: actions/setup-node@v5
90 with:
91 node-version: "lts/*"
9392 
94 - name: Install dependencies
95 run: npm ci
93 - name: Install dependencies
94 run: npm ci
9695 
97 - name: Run tests
98 run: npm run test --if-present
96 - name: Run tests
97 run: npm run test --if-present
9998 
100 - name: Build package
101 run: npm run build --if-present
99 - name: Build package
100 run: npm run build --if-present
102101 
103 - name: Publish package to npm
104 run: npm publish
105 env:
106 NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
102 - name: Publish package to npm
103 run: npm publish
104 env:
105 NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
107106 
108 ### Publish MCP server:
107 ### Publish MCP server:
109108 
110 - name: Install mcp-publisher
111 run: |
112 curl -L "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher
109 - name: Install mcp-publisher
110 run: |
111 curl -L "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher
113112 
114 - name: Authenticate to MCP Registry
115 run: ./mcp-publisher login github --token ${{ secrets.MCP_GITHUB_TOKEN }}
113 - name: Authenticate to MCP Registry
114 run: ./mcp-publisher login github --token ${{ secrets.MCP_GITHUB_TOKEN }}
116115 
117 # Optional:
118 # - name: Set version in server.json
119 # run: |
120 # VERSION=${GITHUB_REF#refs/tags/v}
121 # jq --arg v "$VERSION" '.version = $v' server.json > server.tmp && mv server.tmp server.json
116 # Optional:
117 # - name: Set version in server.json
118 # run: |
119 # VERSION=${GITHUB_REF#refs/tags/v}
120 # jq --arg v "$VERSION" '.version = $v' server.json > server.tmp && mv server.tmp server.json
122121 
123 - name: Publish server to MCP Registry
124 run: ./mcp-publisher publish
125 ```
122 - name: Publish server to MCP Registry
123 run: ./mcp-publisher publish
124```
126125 
127 ```yaml DNS authentication theme={null}
128 name: Publish to MCP Registry
126```yaml DNS authentication theme={null}
127name: Publish to MCP Registry
129128 
130 on:
131 push:
132 tags: ["v*"] # Triggers on version tags like v1.0.0
129on:
130 push:
131 tags: ["v*"] # Triggers on version tags like v1.0.0
133132 
134 jobs:
135 publish:
136 runs-on: ubuntu-latest
137 permissions:
138 contents: read
133jobs:
134 publish:
135 runs-on: ubuntu-latest
136 permissions:
137 contents: read
139138 
140 steps:
141 - name: Checkout code
142 uses: actions/checkout@v5
139 steps:
140 - name: Checkout code
141 uses: actions/checkout@v5
143142 
144 ### Publish underlying npm package:
143 ### Publish underlying npm package:
145144 
146 - name: Set up Node.js
147 uses: actions/setup-node@v5
148 with:
149 node-version: "lts/*"
145 - name: Set up Node.js
146 uses: actions/setup-node@v5
147 with:
148 node-version: "lts/*"
150149 
151 - name: Install dependencies
152 run: npm ci
150 - name: Install dependencies
151 run: npm ci
153152 
154 - name: Run tests
155 run: npm run test --if-present
153 - name: Run tests
154 run: npm run test --if-present
156155 
157 - name: Build package
158 run: npm run build --if-present
156 - name: Build package
157 run: npm run build --if-present
159158 
160 - name: Publish package to npm
161 run: npm publish
162 env:
163 NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
159 - name: Publish package to npm
160 run: npm publish
161 env:
162 NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
164163 
165 ### Publish MCP server:
164 ### Publish MCP server:
166165 
167 - name: Install mcp-publisher
168 run: |
169 curl -L "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher
166 - name: Install mcp-publisher
167 run: |
168 curl -L "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher
170169 
171 # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
172 # TODO: Replace `example.com` with your domain name
173 # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
174 - name: Authenticate to MCP Registry
175 run: ./mcp-publisher login dns --domain example.com --private-key ${{ secrets.MCP_PRIVATE_KEY }}
170 # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
171 # TODO: Replace `example.com` with your domain name
172 # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
173 - name: Authenticate to MCP Registry
174 run: ./mcp-publisher login dns --domain example.com --private-key ${{ secrets.MCP_PRIVATE_KEY }}
176175 
177 # Optional:
178 # - name: Set version in server.json
179 # run: |
180 # VERSION=${GITHUB_REF#refs/tags/v}
181 # jq --arg v "$VERSION" '.version = $v' server.json > server.tmp && mv server.tmp server.json
176 # Optional:
177 # - name: Set version in server.json
178 # run: |
179 # VERSION=${GITHUB_REF#refs/tags/v}
180 # jq --arg v "$VERSION" '.version = $v' server.json > server.tmp && mv server.tmp server.json
182181 
183 - name: Publish server to MCP Registry
184 run: ./mcp-publisher publish
185 ```
186</CodeGroup>
182 - name: Publish server to MCP Registry
183 run: ./mcp-publisher publish
184```
187185 
188186## Step 2: Add Secrets
189187 

registry/moderation-policy Changed · +3 / -3 lines

from line 1
11# The MCP Registry Moderation Policy
22 
3<Note>
4 The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
5</Note>
3> [!NOTE]
4>
5> The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
66 
77**TL;DR**: The MCP Registry is quite permissive! We only remove illegal content, malware, spam, and completely broken servers.
88 

registry/package-types Changed · +3 / -3 lines

from line 1
11# MCP Registry Supported Package Types
22 
3<Note>
4 The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
5</Note>
3> [!NOTE]
4>
5> The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
66 
77# Package Types
88 

registry/quickstart Changed · +15 / -17 lines

from line 1
11# Quickstart: Publish an MCP Server to the MCP Registry
22 
3<Note>
4 The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
5</Note>
3> [!NOTE]
4>
5> The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
66 
77This tutorial will show you how to publish an MCP server written in TypeScript to the MCP Registry using the official `mcp-publisher` CLI tool.
88 
from line 92
9292 
9393Install the `mcp-publisher` CLI tool using a pre-built binary or [Homebrew](https://brew.sh):
9494 
95<CodeGroup>
96 ```bash macOS/Linux theme={null}
97 curl -L "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher && sudo mv mcp-publisher /usr/local/bin/
98 ```
95```bash macOS/Linux theme={null}
96curl -L "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher && sudo mv mcp-publisher /usr/local/bin/
97```
9998 
100 ```powershell Windows theme={null}
101 $arch = if ([System.Runtime.InteropServices.RuntimeInformation]::ProcessArchitecture -eq "Arm64") { "arm64" } else { "amd64" }; Invoke-WebRequest -Uri "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_windows_$arch.tar.gz" -OutFile "mcp-publisher.tar.gz"; tar xf mcp-publisher.tar.gz mcp-publisher.exe; rm mcp-publisher.tar.gz
102 # Move mcp-publisher.exe to a directory in your PATH
103 ```
99```powershell Windows theme={null}
100$arch = if ([System.Runtime.InteropServices.RuntimeInformation]::ProcessArchitecture -eq "Arm64") { "arm64" } else { "amd64" }; Invoke-WebRequest -Uri "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_windows_$arch.tar.gz" -OutFile "mcp-publisher.tar.gz"; tar xf mcp-publisher.tar.gz mcp-publisher.exe; rm mcp-publisher.tar.gz
101# Move mcp-publisher.exe to a directory in your PATH
102```
104103 
105 ```bash theme={null}
106 brew install mcp-publisher
107 ```
108</CodeGroup>
104```bash theme={null}
105brew install mcp-publisher
106```
109107 
110108Verify that `mcp-publisher` is correctly installed by running:
111109 

registry/registry-aggregators Changed · +6 / -6 lines

from line 1
11# MCP Registry Aggregators
22 
3<Note>
4 The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
5</Note>
3> [!NOTE]
4>
5> The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
66 
77Aggregators are downstream consumers of the MCP Registry that provide additional value. For example, a server marketplace that provides user ratings and security scanning.
88 
from line 16
1616* [`GET /v0.1/servers/{serverName}/versions`](https://registry.modelcontextprotocol.io/docs#/operations/get-server-versions-v0.1) — List all versions of a server.
1717* [`GET /v0.1/servers/{serverName}/versions/{version}`](https://registry.modelcontextprotocol.io/docs#/operations/get-server-version-v0.1) — Get a specific version of a server. Use the special version `latest` to get the latest version of the server.
1818 
19<Warning>
20 URL path parameters such as `serverName` and `version` **must** be URL-encoded. For example, `io.modelcontextprotocol/everything` must be encoded as `io.modelcontextprotocol%2Feverything`.
21</Warning>
19> [!WARNING]
20>
21> URL path parameters such as `serverName` and `version` **must** be URL-encoded. For example, `io.modelcontextprotocol/everything` must be encoded as `io.modelcontextprotocol%2Feverything`.
2222 
2323Aggregators will most likely scrape the `GET /v0.1/servers` endpoint.
2424 

registry/remote-servers Changed · +3 / -3 lines

from line 1
11# Publishing Remote Servers
22 
3<Note>
4 The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
5</Note>
3> [!NOTE]
4>
5> The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
66 
77The MCP Registry supports remote MCP servers via the `remotes` property in `server.json`:
88 

registry/terms-of-service Changed · +3 / -3 lines

from line 1
11# Official MCP Registry Terms of Service
22 
3<Note>
4 The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
5</Note>
3> [!NOTE]
4>
5> The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
66 
77**Effective date: 2025-09-02**
88 

registry/versioning Changed · +9 / -9 lines

from line 1
11# Versioning Published MCP Servers
22 
3<Note>
4 The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
5</Note>
3> [!NOTE]
4>
5> The MCP Registry is currently in preview. Breaking changes or data resets may occur before general availability. If you encounter any issues, please report them on [GitHub](https://github.com/modelcontextprotocol/registry/issues).
66 
77MCP servers **MUST** define a version string in `server.json`. For example:
88 
from line 32
3232 
3333The MCP Registry recommends [semantic versioning](https://semver.org/), but supports any version string format. When a server is published, the MCP Registry will attempt to parse its version as a semantic version string for sorting purposes, and will mark the version as "latest" if appropriate. If parsing fails, the version will always be marked as "latest".
3434 
35<Warning>
36 If a server uses semantic version strings but publishes a new version that does *not* conform to semantic versioning, the new version will be marked as "latest" even if it would otherwise be sorted before the semantic version strings.
37</Warning>
35> [!WARNING]
36>
37> If a server uses semantic version strings but publishes a new version that does *not* conform to semantic versioning, the new version will be marked as "latest" even if it would otherwise be sorted before the semantic version strings.
3838 
3939As an error prevention mechanism, the MCP Registry prohibits version strings that appear to refer to ranges of versions.
4040 
from line 148
148148}
149149```
150150 
151<Warning>
152 According to semantic versioning, prerelease versions such as `1.2.3-1` are sorted before regular semantic versions such as `1.2.3`. Therefore, if you publish a prerelease version *after* its corresponding regular version, the prerelease version will **not** be marked as "latest".
153</Warning>
151> [!WARNING]
152>
153> According to semantic versioning, prerelease versions such as `1.2.3-1` are sorted before regular semantic versions such as `1.2.3`. Therefore, if you publish a prerelease version *after* its corresponding regular version, the prerelease version will **not** be marked as "latest".
154154 
155155## Aggregator Recommendations
156156 

seps/1024-mcp-client-security-requirements-for-local-server- Changed · +9 / -15 lines

from line 2
22 
33> MCP Client Security Requirements for Local Server Installation
44 
5<div className="flex items-center gap-2 mb-4">
6 <Badge color="green" shape="pill">
7 Final
8 </Badge>
5Final
96 
10 <Badge color="gray" shape="pill">
11 Standards Track
12 </Badge>
13</div>
7Standards Track
148 
15<Note>
16 This SEP has reached Final status and is preserved as a historical record of
17 the design as accepted. Changes made to the protocol after finalization are
18 not reflected here. Refer to the [current
19 specification](/specification/latest) and its changelog for authoritative
20 requirements.
21</Note>
9> [!NOTE]
10>
11> This SEP has reached Final status and is preserved as a historical record of
12> the design as accepted. Changes made to the protocol after finalization are
13> not reflected here. Refer to the [current
14> specification](/specification/latest) and its changelog for authoritative
15> requirements.
2216 
2317| Field | Value |
2418| - | - |

seps/1034--support-default-values-for-all-primitive-types-in Changed · +9 / -15 lines

from line 2
22 
33> Support default values for all primitive types in elicitation schemas
44 
5<div className="flex items-center gap-2 mb-4">
6 <Badge color="green" shape="pill">
7 Final
8 </Badge>
5Final
96 
10 <Badge color="gray" shape="pill">
11 Standards Track
12 </Badge>
13</div>
7Standards Track
148 
15<Note>
16 This SEP has reached Final status and is preserved as a historical record of
17 the design as accepted. Changes made to the protocol after finalization are
18 not reflected here. Refer to the [current
19 specification](/specification/latest) and its changelog for authoritative
20 requirements.
21</Note>
9> [!NOTE]
10>
11> This SEP has reached Final status and is preserved as a historical record of
12> the design as accepted. Changes made to the protocol after finalization are
13> not reflected here. Refer to the [current
14> specification](/specification/latest) and its changelog for authoritative
15> requirements.
2216 
2317| Field | Value |
2418| - | - |

seps/1036-url-mode-elicitation-for-secure-out-of-band-intera Changed · +11 / -17 lines

from line 2
22 
33> URL Mode Elicitation for secure out-of-band interactions
44 
5<div className="flex items-center gap-2 mb-4">
6 <Badge color="green" shape="pill">
7 Final
8 </Badge>
5Final
96 
10 <Badge color="gray" shape="pill">
11 Standards Track
12 </Badge>
13</div>
7Standards Track
148 
15<Note>
16 This SEP has reached Final status and is preserved as a historical record of
17 the design as accepted. Changes made to the protocol after finalization are
18 not reflected here. Refer to the [current
19 specification](/specification/latest) and its changelog for authoritative
20 requirements.
21</Note>
9> [!NOTE]
10>
11> This SEP has reached Final status and is preserved as a historical record of
12> the design as accepted. Changes made to the protocol after finalization are
13> not reflected here. Refer to the [current
14> specification](/specification/latest) and its changelog for authoritative
15> requirements.
2216 
2317| Field | Value |
2418| - | - |

seps/1046-support-oauth-client-credentials-flow-in-authoriza Changed · +9 / -15 lines

from line 2
22 
33> Support OAuth client credentials flow in authorization
44 
5<div className="flex items-center gap-2 mb-4">
6 <Badge color="green" shape="pill">
7 Final
8 </Badge>
5Final
96 
10 <Badge color="gray" shape="pill">
11 Standards Track
12 </Badge>
13</div>
7Standards Track
148 
15<Note>
16 This SEP has reached Final status and is preserved as a historical record of
17 the design as accepted. Changes made to the protocol after finalization are
18 not reflected here. Refer to the [current
19 specification](/specification/latest) and its changelog for authoritative
20 requirements.
21</Note>
9> [!NOTE]
10>
11> This SEP has reached Final status and is preserved as a historical record of
12> the design as accepted. Changes made to the protocol after finalization are
13> not reflected here. Refer to the [current
14> specification](/specification/latest) and its changelog for authoritative
15> requirements.
2216 
2317| Field | Value |
2418| - | - |

seps/1302-formalize-working-groups-and-interest-groups-in-mc Changed · +11 / -17 lines

from line 2
22 
33> Formalize Working Groups and Interest Groups in MCP Governance
44 
5<div className="flex items-center gap-2 mb-4">
6 <Badge color="green" shape="pill">
7 Final
8 </Badge>
5Final
96 
10 <Badge color="gray" shape="pill">
11 Standards Track
12 </Badge>
13</div>
7Standards Track
148 
15<Note>
16 This SEP has reached Final status and is preserved as a historical record of
17 the design as accepted. Changes made to the protocol after finalization are
18 not reflected here. Refer to the [current
19 specification](/specification/latest) and its changelog for authoritative
20 requirements.
21</Note>
9> [!NOTE]
10>
11> This SEP has reached Final status and is preserved as a historical record of
12> the design as accepted. Changes made to the protocol after finalization are
13> not reflected here. Refer to the [current
14> specification](/specification/latest) and its changelog for authoritative
15> requirements.
2216 
2317| Field | Value |
2418| - | - |

seps/1303-input-validation-errors-as-tool-execution-errors Changed · +9 / -15 lines

from line 2
22 
33> Input Validation Errors as Tool Execution Errors
44 
5<div className="flex items-center gap-2 mb-4">
6 <Badge color="green" shape="pill">
7 Final
8 </Badge>
5Final
96 
10 <Badge color="gray" shape="pill">
11 Standards Track
12 </Badge>
13</div>
7Standards Track
148 
15<Note>
16 This SEP has reached Final status and is preserved as a historical record of
17 the design as accepted. Changes made to the protocol after finalization are
18 not reflected here. Refer to the [current
19 specification](/specification/latest) and its changelog for authoritative
20 requirements.
21</Note>
9> [!NOTE]
10>
11> This SEP has reached Final status and is preserved as a historical record of
12> the design as accepted. Changes made to the protocol after finalization are
13> not reflected here. Refer to the [current
14> specification](/specification/latest) and its changelog for authoritative
15> requirements.
2216 
2317| Field | Value |
2418| - | - |

seps/1319-decouple-request-payload-from-rpc-methods-definiti Changed · +9 / -15 lines

from line 2
22 
33> Decouple Request Payload from RPC Methods Definition
44 
5<div className="flex items-center gap-2 mb-4">
6 <Badge color="green" shape="pill">
7 Final
8 </Badge>
5Final
96 
10 <Badge color="gray" shape="pill">
11 Standards Track
12 </Badge>
13</div>
7Standards Track
148 
15<Note>
16 This SEP has reached Final status and is preserved as a historical record of
17 the design as accepted. Changes made to the protocol after finalization are
18 not reflected here. Refer to the [current
19 specification](/specification/latest) and its changelog for authoritative
20 requirements.
21</Note>
9> [!NOTE]
10>
11> This SEP has reached Final status and is preserved as a historical record of
12> the design as accepted. Changes made to the protocol after finalization are
13> not reflected here. Refer to the [current
14> specification](/specification/latest) and its changelog for authoritative
15> requirements.
2216 
2317| Field | Value |
2418| - | - |

seps/1330-elicitation-enum-schema-improvements-and-standards Changed · +11 / -17 lines

from line 2
22 
33> Elicitation Enum Schema Improvements and Standards Compliance
44 
5<div className="flex items-center gap-2 mb-4">
6 <Badge color="green" shape="pill">
7 Final
8 </Badge>
5Final
96 
10 <Badge color="gray" shape="pill">
11 Standards Track
12 </Badge>
13</div>
7Standards Track
148 
15<Note>
16 This SEP has reached Final status and is preserved as a historical record of
17 the design as accepted. Changes made to the protocol after finalization are
18 not reflected here. Refer to the [current
19 specification](/specification/latest) and its changelog for authoritative
20 requirements.
21</Note>
9> [!NOTE]
10>
11> This SEP has reached Final status and is preserved as a historical record of
12> the design as accepted. Changes made to the protocol after finalization are
13> not reflected here. Refer to the [current
14> specification](/specification/latest) and its changelog for authoritative
15> requirements.
2216 
2317| Field | Value |
2418| - | - |

seps/1577--sampling-with-tools Changed · +11 / -17 lines

from line 2
22 
33> Sampling With Tools
44 
5<div className="flex items-center gap-2 mb-4">
6 <Badge color="green" shape="pill">
7 Final
8 </Badge>
5Final
96 
10 <Badge color="gray" shape="pill">
11 Standards Track
12 </Badge>
13</div>
7Standards Track
148 
15<Note>
16 This SEP has reached Final status and is preserved as a historical record of
17 the design as accepted. Changes made to the protocol after finalization are
18 not reflected here. Refer to the [current
19 specification](/specification/latest) and its changelog for authoritative
20 requirements.
21</Note>
9> [!NOTE]
10>
11> This SEP has reached Final status and is preserved as a historical record of
12> the design as accepted. Changes made to the protocol after finalization are
13> not reflected here. Refer to the [current
14> specification](/specification/latest) and its changelog for authoritative
15> requirements.
2216 
2317| Field | Value |
2418| - | - |

seps/1613-establish-json-schema-2020-12-as-default-dialect-f Changed · +9 / -15 lines

from line 2
22 
33> Establish JSON Schema 2020-12 as Default Dialect for MCP
44 
5<div className="flex items-center gap-2 mb-4">
6 <Badge color="green" shape="pill">
7 Final
8 </Badge>
5Final
96 
10 <Badge color="gray" shape="pill">
11 Standards Track
12 </Badge>
13</div>
7Standards Track
148 
15<Note>
16 This SEP has reached Final status and is preserved as a historical record of
17 the design as accepted. Changes made to the protocol after finalization are
18 not reflected here. Refer to the [current
19 specification](/specification/latest) and its changelog for authoritative
20 requirements.
21</Note>
9> [!NOTE]
10>
11> This SEP has reached Final status and is preserved as a historical record of
12> the design as accepted. Changes made to the protocol after finalization are
13> not reflected here. Refer to the [current
14> specification](/specification/latest) and its changelog for authoritative
15> requirements.
2216 
2317| Field | Value |
2418| - | - |

seps/1686-tasks Changed · +11 / -17 lines

from line 2
22 
33> Tasks
44 
5<div className="flex items-center gap-2 mb-4">
6 <Badge color="green" shape="pill">
7 Final
8 </Badge>
5Final
96 
10 <Badge color="gray" shape="pill">
11 Standards Track
12 </Badge>
13</div>
7Standards Track
148 
15<Note>
16 This SEP has reached Final status and is preserved as a historical record of
17 the design as accepted. Changes made to the protocol after finalization are
18 not reflected here. Refer to the [current
19 specification](/specification/latest) and its changelog for authoritative
20 requirements.
21</Note>
9> [!NOTE]
10>
11> This SEP has reached Final status and is preserved as a historical record of
12> the design as accepted. Changes made to the protocol after finalization are
13> not reflected here. Refer to the [current
14> specification](/specification/latest) and its changelog for authoritative
15> requirements.
2216 
2317| Field | Value |
2418| - | - |

seps/1699-support-sse-polling-via-server-side-disconnect Changed · +9 / -15 lines

from line 2
22 
33> Support SSE polling via server-side disconnect
44 
5<div className="flex items-center gap-2 mb-4">
6 <Badge color="green" shape="pill">
7 Final
8 </Badge>
5Final
96 
10 <Badge color="gray" shape="pill">
11 Standards Track
12 </Badge>
13</div>
7Standards Track
148 
15<Note>
16 This SEP has reached Final status and is preserved as a historical record of
17 the design as accepted. Changes made to the protocol after finalization are
18 not reflected here. Refer to the [current
19 specification](/specification/latest) and its changelog for authoritative
20 requirements.
21</Note>
9> [!NOTE]
10>
11> This SEP has reached Final status and is preserved as a historical record of
12> the design as accepted. Changes made to the protocol after finalization are
13> not reflected here. Refer to the [current
14> specification](/specification/latest) and its changelog for authoritative
15> requirements.
2216 
2317| Field | Value |
2418| - | - |
Feedback