{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://modelcontextprotocol.io/schemas/draft/2025-07-09/server.json", "title": "MCP Server Detail", "$ref": "#/$defs/ServerDetail", "$defs": { "Repository": { "type": "object", "required": [ "url", "source", "id" ], "properties": { "url": { "type": "string", "format": "uri", "example": "https://github.com/modelcontextprotocol/servers" }, "source": { "type": "string", "description": "Repository hosting service", "example": "github" }, "id": { "type": "string", "example": "b94b5f7e-c7c6-d760-2c78-a5e9b8a5b8c9" } } }, "VersionDetail": { "type": "object", "description": "Version information for this server. Defined as an object to allow for downstream extensibility (e.g. release_date)", "required": [ "version" ], "properties": { "version": { "type": "string", "example": "1.0.2", "description": "Equivalent of Implementation.version in MCP specification." } } }, "Server": { "type": "object", "required": [ "name", "description", "version_detail" ], "properties": { "name": { "type": "string", "description": "Server name/identifier", "example": "io.modelcontextprotocol/filesystem" }, "description": { "type": "string", "description": "Human-readable description of the server's functionality", "example": "Node.js server implementing Model Context Protocol (MCP) for filesystem operations." }, "status": { "type": "string", "enum": ["active", "deprecated"], "default": "active", "description": "Server lifecycle status. 'deprecated' indicates the server is no longer recommended for new usage." }, "repository": { "$ref": "#/$defs/Repository" }, "version_detail": { "$ref": "#/$defs/VersionDetail" } } }, "Package": { "type": "object", "required": [ "registry_name", "name", "version" ], "properties": { "registry_name": { "type": "string", "description": "Package registry type", "example": "npm" }, "name": { "type": "string", "description": "Package name in the registry", "example": "io.modelcontextprotocol/filesystem" }, "version": { "type": "string", "description": "Package version", "example": "1.0.2" }, "runtime_hint": { "type": "string", "description": "A hint to help clients determine the appropriate runtime for the package. This field should be provided when `runtime_arguments` are present.", "examples": [ "npx", "uvx", "dnx" ] }, "runtime_arguments": { "type": "array", "description": "A list of arguments to be passed to the package's runtime command (such as docker or npx). The `runtime_hint` field should be provided when `runtime_arguments` are present.", "items": { "$ref": "#/$defs/Argument" } }, "package_arguments": { "type": "array", "description": "A list of arguments to be passed to the package's binary.", "items": { "$ref": "#/$defs/Argument" } }, "environment_variables": { "type": "array", "description": "A mapping of environment variables to be set when running the package.", "items": { "$ref": "#/$defs/KeyValueInput" } } } }, "Input": { "type": "object", "properties": { "description": { "description": "A description of the input, which clients can use to provide context to the user.", "type": "string" }, "is_required": { "type": "boolean", "default": false }, "format": { "type": "string", "description": "Specifies the input format. Supported values include `filepath`, which should be interpreted as a file on the user's filesystem.\n\nWhen the input is converted to a string, booleans should be represented by the strings \"true\" and \"false\", and numbers should be represented as decimal values.", "enum": [ "string", "number", "boolean", "filepath" ], "default": "string" }, "value": { "type": "string", "description": "The default value for the input. If this is not set, the user may be prompted to provide a value. If a value is set, it should not be configurable by end users.\n\nIdentifiers wrapped in `{curly_braces}` will be replaced with the corresponding properties from the input `variables` map. If an identifier in braces is not found in `variables`, or if `variables` is not provided, the `{curly_braces}` substring should remain unchanged.\n" }, "is_secret": { "type": "boolean", "description": "Indicates whether the input is a secret value (e.g., password, token). If true, clients should handle the value securely.", "default": false }, "default": { "type": "string", "description": "The default value for the input." }, "choices": { "type": "array", "description": "A list of possible values for the input. If provided, the user must select one of these values.", "items": { "type": "string" }, "example": [] } } }, "InputWithVariables": { "allOf": [ { "$ref": "#/$defs/Input" }, { "type": "object", "properties": { "variables": { "type": "object", "description": "A map of variable names to their values. Keys in the input `value` that are wrapped in `{curly_braces}` will be replaced with the corresponding variable values.", "additionalProperties": { "$ref": "#/$defs/Input" } } } } ] }, "PositionalArgument": { "description": "A positional input is a value inserted verbatim into the command line.", "allOf": [ { "$ref": "#/$defs/InputWithVariables" }, { "type": "object", "required": [ "type" ], "properties": { "type": { "type": "string", "enum": [ "positional" ], "example": "positional" }, "value_hint": { "type": "string", "description": "An identifier-like hint for the value. This is not part of the command line, but can be used by client configuration and to provide hints to users.", "example": "file_path" }, "is_repeated": { "type": "boolean", "description": "Whether the argument can be repeated multiple times in the command line.", "default": false } }, "anyOf": [ { "required": [ "value_hint" ] }, { "required": [ "value" ] } ] } ] }, "NamedArgument": { "description": "A command-line `--flag={value}`.", "allOf": [ { "$ref": "#/$defs/InputWithVariables" }, { "type": "object", "required": [ "type", "name" ], "properties": { "type": { "type": "string", "enum": [ "named" ], "example": "named" }, "name": { "type": "string", "description": "The flag name, including any leading dashes.", "example": "--port" }, "is_repeated": { "type": "boolean", "description": "Whether the argument can be repeated multiple times.", "default": false } } } ] }, "KeyValueInput": { "allOf": [ { "$ref": "#/$defs/InputWithVariables" }, { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string", "description": "Name of the header or environment variable.", "example": "SOME_VARIABLE" } } } ] }, "Argument": { "anyOf": [ { "$ref": "#/$defs/PositionalArgument" }, { "$ref": "#/$defs/NamedArgument" } ] }, "Remote": { "type": "object", "required": [ "transport_type", "url" ], "properties": { "transport_type": { "type": "string", "enum": [ "streamable", "sse" ], "description": "Transport protocol type", "example": "sse" }, "url": { "type": "string", "format": "uri", "description": "Remote server URL", "example": "https://mcp-fs.example.com/sse" }, "headers": { "type": "array", "description": "HTTP headers to include", "items": { "$ref": "#/$defs/KeyValueInput" } } } }, "ServerDetail": { "description": "Schema for a static representation of an MCP server. Used in various contexts related to discovery, installation, and configuration.", "allOf": [ { "$ref": "#/$defs/Server" }, { "type": "object", "properties": { "packages": { "type": "array", "items": { "$ref": "#/$defs/Package" } }, "remotes": { "type": "array", "items": { "$ref": "#/$defs/Remote" } } } } ] } } }