You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -196,12 +212,12 @@ A full `manifest.json` with most of the optional fields looks like this:
196
212
"type": "string"
197
213
}
198
214
}
199
-
},
215
+
}
200
216
}
201
217
}
202
218
]
203
219
}
204
-
},
220
+
}
205
221
}
206
222
}
207
223
}
@@ -214,30 +230,72 @@ A full `manifest.json` with most of the optional fields looks like this:
214
230
-**manifest_version**: Specification version this extension conforms to
215
231
-**name**: Machine-readable name (used for CLI, APIs)
216
232
-**version**: Semantic version (semver)
217
-
-**description**: Brief description
218
-
-**author**: Author information object with name (required), email (optional), and url (optional)
233
+
-🌎 **description**: Brief description. This field is localizable.
234
+
-🌎 **author**: Author information object with name (required, localizable), email (optional), and url (optional)
219
235
-**server**: Server configuration object
220
236
221
237
### Optional Fields
222
238
223
-
-**icon**: Path to a png icon file, either relative in the package or a https:// url.
224
-
-**display_name**: Human-friendly name for UI display
225
-
-**long_description**: Detailed description for extension stores, markdown
226
-
-**repository**: Source code repository information (type and url)
227
-
-**homepage**: Extension homepage URL
228
-
-**documentation**: Documentation URL
229
-
-**support**: Support/issues URL
230
-
-**screenshots**: Array of screenshot paths
231
-
-**tools**: Array of tools the extension provides
232
-
-**tools_generated**: Boolean indicating the server generates additional tools at runtime (default: false)
233
-
-**prompts**: Array of prompts the extension provides
234
-
-**prompts_generated**: Boolean indicating the server generates additional prompts at runtime (default: false)
235
-
-**keywords**: Search keywords
236
-
-**license**: License identifier
237
-
-**privacy_policies**: Array of URLs to privacy policies for external services that handle user data. Required when the extension connects to external services (first- or third-party) that process user data. Each URL should link to the respective service's privacy policy document
238
-
-**compatibility**: Compatibility requirements (client app version, platforms, and runtime versions)
239
-
-**user_config**: User-configurable options for the extension (see User Configuration section)
240
-
-**_meta**: Platform-specific client integration metadata (e.g., Windows `package_family_name`, macOS bundle identifiers) enabling tighter OS/app store integration. The keys in the `_meta` object are reverse-DNS namespaced, and the values are a dictionary of platform-specific metadata.
239
+
-**icon**: Path to a png icon file, either relative in the package or a `https://` url.
240
+
-**icons**: Array of icon descriptors (`src`, `size`, optional `theme`) for light/dark or size-specific assets.
241
+
- 🌎 **display_name**: Human-friendly name for UI display. This field is localizable.
242
+
- 🌎 **long_description**: Detailed description for extension stores, markdown. This field is localizable.
243
+
-**repository**: Source code repository information (type and url).
244
+
-**homepage**: Extension homepage URL.
245
+
-**documentation**: Documentation URL.
246
+
-**support**: Support/issues URL.
247
+
-**screenshots**: Array of screenshot paths.
248
+
- 🌎 **tools**: Array of tools the extension provides. This field is localizable.
249
+
-**tools_generated**: Boolean indicating the server generates additional tools at runtime (default: false).
250
+
- 🌎 **prompts**: Array of prompts the extension provides. This field is localizable.
251
+
-**prompts_generated**: Boolean indicating the server generates additional prompts at runtime (default: false).
252
+
- 🌎 **keywords**: Search keywords. This field is localizable.
253
+
-**license**: License identifier.
254
+
-**privacy_policies**: Array of URLs to privacy policies for external services that handle user data. Required when the extension connects to external services (first- or third-party) that process user data. Each URL should link to the respective service's privacy policy document.
255
+
-**compatibility**: Compatibility requirements (client app version, platforms, and runtime versions).
256
+
-**user_config**: User-configurable options for the extension (see User Configuration section).
257
+
-**\_meta**: Platform-specific client integration metadata (e.g., Windows `package_family_name`, macOS bundle identifiers) enabling tighter OS/app store integration. The keys in the `_meta` object are reverse-DNS namespaced, and the values are a dictionary of platform-specific metadata.
258
+
-**localization**: Location of translated strings for user-facing fields (`resources` path containing a `${locale}` placeholder and `default_locale`).
259
+
260
+
### Localization
261
+
262
+
Provide localized strings without bloating the manifest by pointing to external per-locale resource files. A localization entry looks like this:
-`resources` must include a `${locale}` placeholder. Clients resolve it relative to the server install directory.
272
+
- This property is optional, and its default value is **`mcpb-resources/${locale}.json`**.
273
+
-`default_locale` must be a valid [BCP 47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) identifier such as `en-US` or `zh-Hans`.
274
+
- This property is optional, and its default value is `en-US`.
275
+
- Values for the default locale stay in the main manifest; localized files only need to contain overrides.
276
+
277
+
For tools and prompts, the descriptions are also localizable.
278
+
279
+
#### Client guidelines
280
+
281
+
- if a client wants to show tool or prompt descriptions in their UI, the client should look for the locale-specific description override in the corresponding per-locale file.
282
+
- clients should only look for tools/prompts present in the manifest.json, i.e. prompts and tools that only exist in the per-locale file should be ignored.
283
+
- Clients should apply locale fallbacks if the client/user locale is not represented by the server. For example, if the user is in the `es-UY` locale but the server does not include that per-locale file, the client should look for an approrpiate fallback, e.g. `es-MX` or `es-ES`, or fall back to the values in the manifest.
284
+
285
+
### Icons
286
+
287
+
Use the `icons` array when you need multiple icon variants (different sizes or themes):
-`size` must be in `WIDTHxHEIGHT` form (e.g., `128x128`).
297
+
-`theme` is optional; use values like `light`, `dark`, or platform-specific labels (e.g., `high-contrast`).
298
+
- The legacy `icon` field remains supported for single assets—clients use it when `icons` is omitted.
241
299
242
300
## Compatibility
243
301
@@ -606,9 +664,9 @@ For servers with a fixed set of capabilities, list them in arrays.
606
664
Each prompt in the `prompts` array must include:
607
665
608
666
-**name**: The identifier for the prompt
609
-
-**description** (optional): Explanation of what the prompt does
667
+
-🌎 **description** (optional): Explanation of what the prompt does
610
668
-**arguments** (optional): Array of argument names that can be used in the prompt text
611
-
-**text**: The actual prompt text that uses template variables like `${arguments.topic}` or `${arguments.aspect}` as placeholders for MCP Client-supplied arguments. If your argument is named `language`, you'd add `${arguments.language} where you expect it to show up in the prompt.
669
+
-🌎 **text**: The actual prompt text that uses template variables like `${arguments.topic}` or `${arguments.aspect}` as placeholders for MCP Client-supplied arguments. If your argument is named `language`, you'd add `${arguments.language}` where you expect it to show up in the prompt.
612
670
613
671
Example:
614
672
@@ -655,4 +713,3 @@ The `_generated` fields:
655
713
-**prompts_generated**: Server generates additional prompts beyond those listed (default: false)
656
714
657
715
This helps implementing apps understand that querying the server at runtime will reveal more capabilities than what's declared in the manifest.
0 commit comments