MCP Description - 'mcpdesc'

A portable, machine-readable format for describing what an MCP server offers — its tools, resources, prompts, transports, and security — declared in a single static document. Think OpenAPI, but for the Model Context Protocol.

Specification version 0.7.0 · Draft.

What it is

The MCP ecosystem relies on runtime discovery through protocol initialization and capability inspection. That works well for dynamic interactions, but it limits offline tooling, cross-platform interoperability, and design-first workflows.

An MCP Description addresses this by declaring a server's capabilities as a static, curated document you can version, share, and validate — independently of any running server.

Protocol vs. Description

An MCP Description does not replace the MCP protocol — it complements it. The protocol defines runtime behavior; a description defines what the server offers.

MCP ProtocolMCP Description
Runtime communicationStatic declaration
Initialize handshakeServer metadata
Tool invocationTool definitions
Resource fetchingResource definitions

A minimal example

An MCP Description can be written in YAML or JSON. Either way, an mcpdesc document includes the specification version, server info, at least one transport, and at least one capability — tools, resources, resource templates, or prompts.

mcpdesc: "0.7.0"
info:
  name: chess-rating-server
  version: 1.0.0
transports:
  - type: stdio
    command: chess-rating
    args: [serve]
tools:
  - name: get_player_rating
    description: Get the current Elo rating for a chess player
    inputSchema:
      type: object
      properties:
        player_id:
          type: string
          description: Player identifier
      required: [player_id]

Generate an MCP description from a live server

Point the mcpcontract CLI at any MCP server to produce an mcpdesc document you can open in the editor:

mcpcontract dump \
  --transport streamable-http \
  --url "https://your-mcp-server/mcp" \
  --output server.mcpdesc.json

Read the docs →