Resolves #12. ## What & why Moves the **single-server Server Card** off a `.well-known` path. We reserve `GET <streamable-http-url>/server-card` as the recommended location while allowing **any unreserved URI** — the Catalog (`/.well-known/mcp/catalog.json`) is the discovery entrypoint and already carries each card's `url`, so clients never need to guess where a card lives. Adopts wording close to the resolution discussed in #12 (credit: Darrel Miller's point that `.well-known` is for *site-wide* metadata, not application-level metadata like an individual server's card; proposed wording from @SamMorrowDrums and @tadasant): > MCP Servers MAY host their Server Card at `GET <streamable-http-url>/server-card`, which we reserve for this purpose, though any unreserved URI is valid. MCP Servers SHOULD respect the agreed media type wherever they choose to host it. After a client identifies a Server Card URL from an AI Catalog or MCP Catalog, it SHOULD request that URL expressing the Server Card media type. ### Content negotiation A client fetching a Server Card requests its preferred representation with the `Accept` header (`Accept: application/mcp-server-card+json`) — the request-side content-negotiation header for a GET. The server echoes the type it actually served back in the response's `Content-Type`. > **Note on media type:** this PR is scoped to *placement* only and does **not** perform the `application/mcp-server+json` → `application/mcp-server-card+json` rename — that is handled in a separate PR. So the two coexist deliberately here: > - **Pre-existing strings** (catalog-entry description, the four example `mediaType` values, validation prose, and the "Server Cards use the media type" line) are left as `application/mcp-server+json`, untouched, for the rename PR to sweep. > - **New prose introduced by this PR** (the reserved-location blockquote and the `Accept`-header example in the "Server Card Location" section) names the type explicitly as the **post-rename `application/mcp-server-card+json`**, since the rename PR's diff is against `main` and would not touch text that doesn't yet exist there. > > The temporary mix resolves to a single consistent type once both PRs land. ## Rationale for `/server-card` (also captured permanently in `docs/discovery.md` → "Alternatives considered") - **Not `.well-known`:** site-wide vs. application-level metadata; the Catalog already provides the `url`, so `.well-known` adds no value for the card. - **Not the bare streamable-HTTP endpoint** (`GET <url>` with no suffix): a GET there already opens the SSE stream in Streamable HTTP. Hosting the card there overloads the connection-establishing endpoint and forces content negotiation to disambiguate. Spec-*allowed*, explicitly **not recommended** — this is the primary motivation for a distinct suffix. - **Not domain-root `/mcp/` nesting:** `/mcp` denotes the *transport endpoint itself* in MCP's canonical-URI examples; there's no precedent for `/mcp/` as a metadata sub-namespace, and it collides conceptually with "the JSON-RPC endpoint." - **Elegant consequence:** because the suffix is appended to the streamable-HTTP URL, a server at `https://host/mcp` naturally yields `https://host/mcp/server-card` — path-namespacing for free. ## Scope guardrail This applies **only to the single-server Server Card**. `.well-known` is unchanged and remains correct for the **Catalog** (`/.well-known/mcp/catalog.json`) and OAuth metadata (`/.well-known/oauth-protected-resource`, etc.) — those are genuinely site-wide. The doc calls this out explicitly so it doesn't read as "abandon `.well-known` everywhere." ## Files changed - **`docs/discovery.md`** — new "Server Card Location" section with the reserved convention + `Accept`-header guidance; permanent "Alternatives considered" subsection; rewritten single- and multi-server example URLs (`https://example.com/mcp/server-card`; `https://acme.com/code-review/server-card`, `/docs-search/server-card`, `/ci-cd/server-card`). - **`schema.ts`** — updated the two `.well-known` doc comments (`ServerCard` and `Server`) to the new convention. - **`schema.json`** — regenerated from `schema.ts` (`npm run generate`). - **`README.md`** — updated the "What is a Server Card?" line to the new convention, normalizing the pre-existing README-vs-schema `.well-known` mismatch. ## Verification - [x] `npm run check` passes (schema.json in sync with schema.ts + `tsc --noEmit` clean) - [x] `npm run generate` run and regenerated `schema.json` committed in the same change - [x] `npm run validate` passes — all 7 examples validate against the regenerated schema - [x] `npm run format` run (prettier clean) - [x] No single-server-card `.well-known` references remain in `README.md`, `schema.ts`, `schema.json`, or `docs/discovery.md` (verified via grep); remaining `.well-known` references are Catalog/OAuth/the "Alternatives considered" explainer only - [x] Pre-existing media-type strings left untouched — `git diff origin/main` shows zero changes to existing `application/mcp-server+json` strings (rename owned by a separate PR); only the new placement prose names the post-rename `application/mcp-server-card+json` - [x] Examples updated and internally consistent with the new prose - [x] Fresh-eyes subagent review performed; its one cosmetic finding was addressed and CI re-confirmed green - [x] CI green (see checks on this PR) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Agent (Claude) <peter@tadasant.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
577 lines
17 KiB
TypeScript
577 lines
17 KiB
TypeScript
/**
|
|
* MCP Server Cards
|
|
*
|
|
* Experimental schema for SEP-2127. This file is the single source of truth
|
|
* for the Server Card and `server.json` types and is intended to be lifted
|
|
* directly into `schema/draft/schema.ts` of the main MCP specification when
|
|
* Server Cards graduate from this experimental extension.
|
|
*
|
|
* @see https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2127
|
|
*/
|
|
|
|
/**
|
|
* A static metadata document describing a remote MCP server, suitable for
|
|
* pre-connection discovery. A Server Card MAY be hosted at any unreserved URI;
|
|
* MCP reserves `GET <streamable-http-url>/server-card` as the recommended
|
|
* location. Clients learn a card's URL from an MCP/AI Catalog rather than
|
|
* guessing it.
|
|
*
|
|
* Server Cards intentionally describe only what is needed to discover and
|
|
* connect to a remote server: identity, transport, and protocol versions.
|
|
* They do not enumerate primitives (tools, resources, prompts) — those remain
|
|
* subject to runtime listing via the protocol's standard list operations.
|
|
*
|
|
* The companion {@link Server} shape is a strict superset that adds local
|
|
* package metadata for use cases like the MCP Registry's `server.json`.
|
|
*
|
|
* @see [SEP-2127: MCP Server Cards](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2127)
|
|
* @category Server Cards
|
|
*/
|
|
export interface ServerCard {
|
|
/**
|
|
* The Server Card JSON Schema URI that this document conforms to. Required.
|
|
*
|
|
* Must be a `/v1/` URL under `static.modelcontextprotocol.io/schemas/`,
|
|
* naming a Server Card / `server.json` schema (e.g.,
|
|
* `https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json`
|
|
* or `https://static.modelcontextprotocol.io/schemas/v1/server.schema.json`).
|
|
* Schema URLs are versioned by the `vN` segment rather than by date so that
|
|
* minor, additive revisions of the v1 shape don't bump every published
|
|
* document's `$schema` URL.
|
|
*
|
|
* @format uri
|
|
* @pattern ^https://static\.modelcontextprotocol\.io/schemas/v1/[^/]+\.schema\.json$
|
|
*/
|
|
$schema: string;
|
|
|
|
/**
|
|
* Server name in reverse-DNS format. Must contain exactly one forward slash
|
|
* separating namespace from server name.
|
|
*
|
|
* @minLength 3
|
|
* @maxLength 200
|
|
* @pattern ^[a-zA-Z0-9.-]+/[a-zA-Z0-9._-]+$
|
|
*/
|
|
name: string;
|
|
|
|
/**
|
|
* Version string for this server. SHOULD follow semantic versioning
|
|
* (e.g., '1.0.2', '2.1.0-alpha'). Equivalent of `Implementation.version`
|
|
* in the MCP specification. Non-semantic versions are allowed but may not
|
|
* sort predictably. Version ranges are rejected (e.g., '^1.2.3', '~1.2.3',
|
|
* '>=1.2.3', '1.x', '1.*').
|
|
*
|
|
* @maxLength 255
|
|
*/
|
|
version: string;
|
|
|
|
/**
|
|
* Clear human-readable explanation of server functionality. Should focus on
|
|
* capabilities, not implementation details.
|
|
*
|
|
* @minLength 1
|
|
* @maxLength 100
|
|
*/
|
|
description: string;
|
|
|
|
/**
|
|
* Optional human-readable title or display name for the MCP server.
|
|
* MCP subregistries or clients MAY choose to use this for display purposes.
|
|
*
|
|
* @minLength 1
|
|
* @maxLength 100
|
|
*/
|
|
title?: string;
|
|
|
|
/**
|
|
* Optional URL to the server's homepage, documentation, or project website.
|
|
* Provides a central link for users to learn more about the server.
|
|
* Particularly useful when the server has custom installation instructions
|
|
* or setup requirements.
|
|
*
|
|
* @format uri
|
|
*/
|
|
websiteUrl?: string;
|
|
|
|
/**
|
|
* Optional repository metadata for the MCP server source code.
|
|
* Recommended for transparency and security inspection.
|
|
*/
|
|
repository?: Repository;
|
|
|
|
/**
|
|
* Optional set of sized icons that the client can display in a user interface.
|
|
*
|
|
* Clients that support rendering icons MUST support at least the following
|
|
* MIME types: `image/png` and `image/jpeg` (safe, universal compatibility).
|
|
* Clients SHOULD also support: `image/svg+xml` (scalable but requires security
|
|
* precautions) and `image/webp` (modern, efficient format).
|
|
*/
|
|
icons?: Icon[];
|
|
|
|
/**
|
|
* Metadata helpful for making HTTP-based connections to this MCP server.
|
|
*/
|
|
remotes?: Remote[];
|
|
|
|
/**
|
|
* Extension metadata using reverse-DNS namespacing for vendor-specific data.
|
|
*
|
|
* Follows the protocol's standard `_meta` definition.
|
|
*
|
|
* @see {@link MetaObject}
|
|
*/
|
|
_meta?: MetaObject;
|
|
}
|
|
|
|
/**
|
|
* A superset of {@link ServerCard} that additionally describes locally-runnable
|
|
* packages. This is the shape used by the MCP Registry's `server.json`.
|
|
*
|
|
* `Server` documents are typically published to a registry rather than served
|
|
* from a Server Card URI (e.g., `<streamable-http-url>/server-card`), since they
|
|
* may include instructions for installing and executing a server on a client's
|
|
* local machine.
|
|
*
|
|
* @see [SEP-2127: MCP Server Cards](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2127)
|
|
* @category Server Cards
|
|
*/
|
|
export interface Server extends ServerCard {
|
|
/**
|
|
* Metadata helpful for running and connecting to local instances of this MCP server.
|
|
*/
|
|
packages?: Package[];
|
|
}
|
|
|
|
/**
|
|
* Repository metadata for the MCP server source code. Enables users and
|
|
* security experts to inspect the code, improving transparency.
|
|
*
|
|
* @category Server Cards
|
|
*/
|
|
export interface Repository {
|
|
/**
|
|
* Repository URL for browsing source code. Should support both web browsing
|
|
* and `git clone` operations.
|
|
*
|
|
* @format uri
|
|
*/
|
|
url: string;
|
|
|
|
/**
|
|
* Repository hosting service identifier (e.g., `"github"`). Used by registries
|
|
* to determine validation and API access methods.
|
|
*/
|
|
source: string;
|
|
|
|
/**
|
|
* Optional relative path from repository root to the server location within a
|
|
* monorepo or nested package structure. Must be a clean relative path.
|
|
*/
|
|
subfolder?: string;
|
|
|
|
/**
|
|
* Repository identifier from the hosting service (e.g., GitHub repo ID).
|
|
* Owned and determined by the source forge. Should remain stable across
|
|
* repository renames and may be used to detect repository resurrection
|
|
* attacks — if a repository is deleted and recreated, the ID should change.
|
|
*/
|
|
id?: string;
|
|
}
|
|
|
|
/**
|
|
* Metadata for connecting to a remote (HTTP-based) MCP server endpoint.
|
|
*
|
|
* @category Server Cards
|
|
*/
|
|
export interface Remote {
|
|
/**
|
|
* The transport type for this remote endpoint.
|
|
*/
|
|
type: "streamable-http" | "sse";
|
|
|
|
/**
|
|
* URL template for the remote endpoint. Must start with `http://`,
|
|
* `https://`, or a `{template-variable}`. Variables in `{curly_braces}`
|
|
* are substituted from the {@link Remote.variables} map before the
|
|
* client connects.
|
|
*
|
|
* @pattern ^(https?://[^\s]+|\{[a-zA-Z_][a-zA-Z0-9_]*\}[^\s]*)$
|
|
*/
|
|
url: string;
|
|
|
|
/**
|
|
* HTTP headers required or accepted when connecting to this remote
|
|
* endpoint. Each header is described as a {@link KeyValueInput} so that
|
|
* clients can prompt users for required values, mark secrets, surface
|
|
* defaults, and constrain to a list of choices.
|
|
*/
|
|
headers?: KeyValueInput[];
|
|
|
|
/**
|
|
* Configuration variables that can be referenced as `{curly_braces}`
|
|
* placeholders in `url` (and inside header values via
|
|
* {@link InputWithVariables.variables}). The map key is the variable
|
|
* name; the value defines the variable's properties (e.g., human-readable
|
|
* description, default, whether it is required or secret).
|
|
*/
|
|
variables?: { [key: string]: Input };
|
|
|
|
/**
|
|
* MCP protocol versions actively supported by this remote endpoint. Allows
|
|
* clients to negotiate a compatible protocol version before initialization.
|
|
*/
|
|
supportedProtocolVersions?: string[];
|
|
}
|
|
|
|
/**
|
|
* Metadata for installing and running a packaged MCP server locally.
|
|
*
|
|
* @category Server Cards
|
|
*/
|
|
export interface Package {
|
|
/**
|
|
* Registry type indicating how to download packages
|
|
* (e.g., `"npm"`, `"pypi"`, `"oci"`, `"nuget"`, `"mcpb"`).
|
|
*/
|
|
registryType: string;
|
|
|
|
/**
|
|
* Package identifier — either a package name (for registries)
|
|
* or a URL (for direct downloads).
|
|
*/
|
|
identifier: string;
|
|
|
|
/**
|
|
* Transport configuration for invoking this package after installation.
|
|
*/
|
|
transport: PackageTransport;
|
|
|
|
/**
|
|
* Base URL of the package registry.
|
|
*
|
|
* @format uri
|
|
*/
|
|
registryBaseUrl?: string;
|
|
|
|
/**
|
|
* Package version.
|
|
*
|
|
* @minLength 1
|
|
*/
|
|
version?: string;
|
|
|
|
/**
|
|
* MCP protocol versions actively supported by this package.
|
|
*/
|
|
supportedProtocolVersions?: string[];
|
|
|
|
/**
|
|
* A hint to help clients determine the appropriate runtime for the package
|
|
* (e.g., `"npx"`, `"uvx"`, `"docker"`, `"dnx"`). Should be provided when
|
|
* `runtimeArguments` are present.
|
|
*/
|
|
runtimeHint?: string;
|
|
|
|
/**
|
|
* Arguments passed to the package's runtime command (such as `docker` or
|
|
* `npx`). The `runtimeHint` field should be provided when `runtimeArguments`
|
|
* are present.
|
|
*/
|
|
runtimeArguments?: Argument[];
|
|
|
|
/**
|
|
* Arguments passed to the package's binary.
|
|
*/
|
|
packageArguments?: Argument[];
|
|
|
|
/**
|
|
* Environment variables to be set when running the package.
|
|
*/
|
|
environmentVariables?: KeyValueInput[];
|
|
|
|
/**
|
|
* SHA-256 hash of the package file for integrity verification. Required for
|
|
* MCPB packages and optional for other package types. If present, MCP
|
|
* clients MUST validate the downloaded file matches the hash before running
|
|
* packages to ensure file integrity.
|
|
*
|
|
* @pattern ^[a-f0-9]{64}$
|
|
*/
|
|
fileSha256?: string;
|
|
}
|
|
|
|
/**
|
|
* Transport protocol configuration for a locally-runnable package.
|
|
*
|
|
* @category Server Cards
|
|
*/
|
|
export type PackageTransport =
|
|
| StdioTransport
|
|
| StreamableHttpPackageTransport
|
|
| SsePackageTransport;
|
|
|
|
/**
|
|
* Stdio transport — the client launches the package as a subprocess and
|
|
* communicates over standard input and output.
|
|
*
|
|
* @category Server Cards
|
|
*/
|
|
export interface StdioTransport {
|
|
type: "stdio";
|
|
}
|
|
|
|
/**
|
|
* Streamable-HTTP transport for a locally-runnable package that exposes
|
|
* itself over HTTP after launch.
|
|
*
|
|
* @category Server Cards
|
|
*/
|
|
export interface StreamableHttpPackageTransport {
|
|
type: "streamable-http";
|
|
|
|
/**
|
|
* URL template for the streamable-http transport. Must start with
|
|
* `http://`, `https://`, or a `{template-variable}`. Variables in
|
|
* `{curly_braces}` reference argument value-hints, argument names, or
|
|
* environment variable names from the parent {@link Package}.
|
|
*
|
|
* @pattern ^(https?://[^\s]+|\{[a-zA-Z_][a-zA-Z0-9_]*\}[^\s]*)$
|
|
*/
|
|
url: string;
|
|
|
|
/**
|
|
* HTTP headers to include when connecting to the package's local endpoint.
|
|
*/
|
|
headers?: KeyValueInput[];
|
|
}
|
|
|
|
/**
|
|
* Server-sent events (SSE) transport for a locally-runnable package.
|
|
*
|
|
* @category Server Cards
|
|
*/
|
|
export interface SsePackageTransport {
|
|
type: "sse";
|
|
|
|
/**
|
|
* SSE endpoint URL template. See {@link StreamableHttpPackageTransport.url}
|
|
* for variable-substitution semantics.
|
|
*
|
|
* @pattern ^(https?://[^\s]+|\{[a-zA-Z_][a-zA-Z0-9_]*\}[^\s]*)$
|
|
*/
|
|
url: string;
|
|
|
|
/**
|
|
* HTTP headers to include when connecting to the package's local endpoint.
|
|
*/
|
|
headers?: KeyValueInput[];
|
|
}
|
|
|
|
/**
|
|
* A command-line argument supplied to a package's binary or runtime.
|
|
*
|
|
* @remarks
|
|
* Arguments construct command-line parameters that may contain user-provided
|
|
* input. This creates potential command-injection risks if clients execute
|
|
* commands in a shell environment. Clients SHOULD prefer non-shell execution
|
|
* methods (e.g., `posix_spawn`) when possible to eliminate injection risks
|
|
* entirely. Where not possible, clients SHOULD obtain user consent to run the
|
|
* resolved command before execution.
|
|
*
|
|
* @category Server Cards
|
|
*/
|
|
export type Argument = PositionalArgument | NamedArgument;
|
|
|
|
/**
|
|
* A user-supplied or pre-set input value, used in {@link Package} argument
|
|
* and environment-variable definitions.
|
|
*
|
|
* @category Server Cards
|
|
*/
|
|
export interface Input {
|
|
/**
|
|
* Human-readable explanation of the input. Clients can use this to provide
|
|
* context to the user.
|
|
*/
|
|
description?: string;
|
|
|
|
/**
|
|
* Whether the input must be supplied for the package to run.
|
|
*/
|
|
isRequired?: boolean;
|
|
|
|
/**
|
|
* Whether the input is a secret value (e.g., password, token). If true,
|
|
* clients should handle the value securely.
|
|
*/
|
|
isSecret?: boolean;
|
|
|
|
/**
|
|
* Specifies the input format. `"filepath"` should be interpreted as a file
|
|
* on the user's filesystem. When the input is converted to a string,
|
|
* booleans should be represented by `"true"`/`"false"`, and numbers by
|
|
* decimal values.
|
|
*/
|
|
format?: "string" | "number" | "boolean" | "filepath";
|
|
|
|
/**
|
|
* Default value for the input. SHOULD be a valid value for the input.
|
|
*/
|
|
default?: string;
|
|
|
|
/**
|
|
* Placeholder displayed during configuration to provide examples or
|
|
* guidance about the expected form of the input.
|
|
*/
|
|
placeholder?: string;
|
|
|
|
/**
|
|
* Pre-set value for the input. If set, the value should not be configurable
|
|
* by end users. Identifiers wrapped in `{curly_braces}` will be replaced
|
|
* with the corresponding entries from the input's `variables` map (if any).
|
|
*/
|
|
value?: string;
|
|
|
|
/**
|
|
* Allowed values for the input. If provided, the user must select one.
|
|
*/
|
|
choices?: string[];
|
|
}
|
|
|
|
/**
|
|
* An {@link Input} whose `value` may reference variables for substitution.
|
|
*
|
|
* @category Server Cards
|
|
*/
|
|
export interface InputWithVariables extends Input {
|
|
/**
|
|
* Variables referenced by `{curly_braces}` identifiers in `value`. The map
|
|
* key is the variable name; the value defines the variable's properties.
|
|
*/
|
|
variables?: { [key: string]: Input };
|
|
}
|
|
|
|
/**
|
|
* A named input — used for environment variables and HTTP headers.
|
|
*
|
|
* @category Server Cards
|
|
*/
|
|
export interface KeyValueInput extends InputWithVariables {
|
|
/**
|
|
* Name of the header or environment variable.
|
|
*/
|
|
name: string;
|
|
}
|
|
|
|
/**
|
|
* A positional command-line input — a value inserted verbatim into the
|
|
* command line.
|
|
*
|
|
* @category Server Cards
|
|
*/
|
|
export interface PositionalArgument extends InputWithVariables {
|
|
type: "positional";
|
|
|
|
/**
|
|
* Identifier for the positional argument. It is not part of the command
|
|
* line; it may be used by client configuration as a label identifying the
|
|
* argument, and it identifies the value in transport URL variable
|
|
* substitution.
|
|
*
|
|
* Implementations SHOULD ensure that at least one of `valueHint` or
|
|
* `value` is set so the positional argument resolves to a concrete value.
|
|
*/
|
|
valueHint?: string;
|
|
|
|
/**
|
|
* Whether the argument can be repeated multiple times in the command line.
|
|
*/
|
|
isRepeated?: boolean;
|
|
}
|
|
|
|
/**
|
|
* A named command-line input — a `--flag={value}` parameter.
|
|
*
|
|
* @category Server Cards
|
|
*/
|
|
export interface NamedArgument extends InputWithVariables {
|
|
type: "named";
|
|
|
|
/**
|
|
* The flag name, including any leading dashes (e.g., `"--port"`).
|
|
*/
|
|
name: string;
|
|
|
|
/**
|
|
* Whether the argument can be repeated multiple times.
|
|
*/
|
|
isRepeated?: boolean;
|
|
}
|
|
|
|
/* ---------- Inlined dependencies from the main MCP spec ---------- */
|
|
|
|
/**
|
|
* Represents the contents of a `_meta` field, which clients and servers use to attach additional metadata to their interactions.
|
|
*
|
|
* Certain key names are reserved by MCP for protocol-level metadata; implementations MUST NOT make assumptions about values at these keys. Additionally, specific schema definitions may reserve particular names for purpose-specific metadata, as declared in those definitions.
|
|
*
|
|
* Valid keys have two segments:
|
|
*
|
|
* **Prefix:**
|
|
* - Optional — if specified, MUST be a series of _labels_ separated by dots (`.`), followed by a slash (`/`).
|
|
* - Labels MUST start with a letter and end with a letter or digit. Interior characters may be letters, digits, or hyphens (`-`).
|
|
* - Any prefix consisting of zero or more labels, followed by `modelcontextprotocol` or `mcp`, followed by any label, is **reserved** for MCP use. For example: `modelcontextprotocol.io/`, `mcp.dev/`, `api.modelcontextprotocol.org/`, and `tools.mcp.com/` are all reserved.
|
|
*
|
|
* **Name:**
|
|
* - Unless empty, MUST start and end with an alphanumeric character (`[a-z0-9A-Z]`).
|
|
* - Interior characters may be alphanumeric, hyphens (`-`), underscores (`_`), or dots (`.`).
|
|
*
|
|
* @see [General fields: `_meta`](https://modelcontextprotocol.io/specification/draft/basic#meta) for more details.
|
|
* @category Common Types
|
|
*/
|
|
export type MetaObject = Record<string, unknown>;
|
|
|
|
/**
|
|
* An optionally-sized icon that can be displayed in a user interface.
|
|
*
|
|
* @category Common Types
|
|
*/
|
|
export interface Icon {
|
|
/**
|
|
* A standard URI pointing to an icon resource. May be an HTTP/HTTPS URL or a
|
|
* `data:` URI with Base64-encoded image data.
|
|
*
|
|
* Consumers SHOULD take steps to ensure URLs serving icons are from the
|
|
* same domain as the client/server or a trusted domain.
|
|
*
|
|
* Consumers SHOULD take appropriate precautions when consuming SVGs as they can contain
|
|
* executable JavaScript.
|
|
*
|
|
* @format uri
|
|
*/
|
|
src: string;
|
|
|
|
/**
|
|
* Optional MIME type override if the source MIME type is missing or generic.
|
|
* For example: `"image/png"`, `"image/jpeg"`, or `"image/svg+xml"`.
|
|
*/
|
|
mimeType?: string;
|
|
|
|
/**
|
|
* Optional array of strings that specify sizes at which the icon can be used.
|
|
* Each string should be in WxH format (e.g., `"48x48"`, `"96x96"`) or `"any"` for scalable formats like SVG.
|
|
*
|
|
* If not provided, the client should assume that the icon can be used at any size.
|
|
*/
|
|
sizes?: string[];
|
|
|
|
/**
|
|
* Optional specifier for the theme this icon is designed for. `"light"` indicates
|
|
* the icon is designed to be used with a light background, and `"dark"` indicates
|
|
* the icon is designed to be used with a dark background.
|
|
*
|
|
* If not provided, the client should assume the icon can be used with any theme.
|
|
*/
|
|
theme?: "light" | "dark";
|
|
}
|