{
  "title": "MCP Host, Client, and Server Responsibilities",
  "schemaVersion": "1.0",
  "researchFreeze": "2026-08-25",
  "protocolRevision": "2026-07-28",
  "count": 30,
  "records": [
    {
      "recordId": "R5-RESP01",
      "responsibility": "User-facing chat or agent interface",
      "host": "Primary responsibility",
      "client": "No independent UI requirement",
      "server": "Usually none; MCP Apps are a negotiated exception",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP02",
      "responsibility": "Model selection and model-provider access",
      "host": "Chooses or configures model/provider",
      "client": "Transports MCP messages; does not select the model",
      "server": "No model requirement; may request host-mediated input through supported patterns",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP03",
      "responsibility": "Conversation and working context",
      "host": "Owns complete conversation and assembles context",
      "client": "Receives only protocol data needed for one server",
      "server": "Sees only data the host/client sends",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP04",
      "responsibility": "Cross-server orchestration",
      "host": "Coordinates tools and data from multiple servers",
      "client": "Limited to its server relationship",
      "server": "Should remain focused; cannot inspect peer servers by default",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP05",
      "responsibility": "Creating MCP client instances",
      "host": "Creates and manages them",
      "client": "Is the created protocol component",
      "server": "Accepts client requests",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP06",
      "responsibility": "Protocol message construction and parsing",
      "host": "May delegate to SDK/client subsystem",
      "client": "Primary client-side responsibility",
      "server": "Primary server-side responsibility",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP07",
      "responsibility": "Protocol version declaration",
      "host": "Selects supported implementation policy",
      "client": "Attaches version to every modern request",
      "server": "Validates version and advertises supported versions",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP08",
      "responsibility": "Capability declaration",
      "host": "Determines host-supported client capabilities",
      "client": "Attaches client capabilities to requests",
      "server": "Declares server capabilities, including through server/discover",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP09",
      "responsibility": "Capability publication",
      "host": "Consumes and curates",
      "client": "Discovers and carries definitions",
      "server": "Publishes tools, resources, prompts and extensions",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP10",
      "responsibility": "Tool selection by model",
      "host": "Exposes selected tool schemas to the model and interprets tool calls",
      "client": "Does not reason about which tool the model should choose",
      "server": "Describes tools; does not control the host model",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP11",
      "responsibility": "Tool invocation",
      "host": "Approves, filters and initiates",
      "client": "Sends tools/call",
      "server": "Executes or delegates the operation",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP12",
      "responsibility": "Tool business authorization",
      "host": "May enforce user policy and approvals",
      "client": "Carries identity and arguments",
      "server": "Must enforce authorization for its objects and underlying systems",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP13",
      "responsibility": "Human confirmation interface",
      "host": "Primary responsibility",
      "client": "May carry decision data",
      "server": "Cannot guarantee the host's UI or confirmation design",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP14",
      "responsibility": "Result presentation",
      "host": "Renders text, structured data, resources or Apps",
      "client": "Transports result",
      "server": "Produces protocol result",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP15",
      "responsibility": "Error handling and recovery",
      "host": "Decides user-facing recovery and model retry policy",
      "client": "Parses protocol/transport errors and may retry",
      "server": "Returns valid errors and preserves idempotency semantics",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP16",
      "responsibility": "Local subprocess launch",
      "host": "Owns product policy and configuration",
      "client": "Usually starts/manages stdio server process",
      "server": "Runs as spawned child process",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP17",
      "responsibility": "Remote transport connection",
      "host": "Owns approved endpoint policy",
      "client": "Sends HTTP requests and handles streams",
      "server": "Operates endpoint, routing and capacity",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP18",
      "responsibility": "OAuth or remote authorization initiation",
      "host": "Presents consent and account UX",
      "client": "Performs protocol-side authorization flow",
      "server": "Validates tokens and protects resources",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP19",
      "responsibility": "Upstream credentials",
      "host": "May hold user tokens in some designs",
      "client": "Should not need broad underlying credentials",
      "server": "Often holds or receives delegated credentials for its backend",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP20",
      "responsibility": "Secrets storage",
      "host": "Protects client-side secrets and connector credentials",
      "client": "Uses configured credentials without exposing them",
      "server": "Protects service-side and upstream secrets",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP21",
      "responsibility": "Server isolation",
      "host": "Must prevent one server from seeing another's data by default",
      "client": "Maintains one logical relationship to one server",
      "server": "Receives only its own request data",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP22",
      "responsibility": "Application state",
      "host": "Conversation, plans, model state",
      "client": "Connection/configuration state as implementation detail",
      "server": "Database, handles, tasks or backend state where required",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP23",
      "responsibility": "Protocol session state (2026-07-28)",
      "host": "None required by MCP core",
      "client": "None required by MCP core",
      "server": "None required by MCP core",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP24",
      "responsibility": "Explicit state handles",
      "host": "Returns handle to model/application when needed",
      "client": "Transports handle in later requests",
      "server": "Creates, validates, authorizes and expires handle",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP25",
      "responsibility": "Notification subscriptions",
      "host": "Chooses what to subscribe to and how to surface it",
      "client": "Maintains subscriptions/listen relationship",
      "server": "Emits only subscribed notification types",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP26",
      "responsibility": "MCP App rendering",
      "host": "Sandbox, consent, CSP and bridge behavior",
      "client": "Negotiates extension and transports UI metadata",
      "server": "Supplies application resource and associated tool data",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP27",
      "responsibility": "Observability",
      "host": "Records user decisions and model/tool orchestration",
      "client": "Records protocol latency/errors",
      "server": "Records execution, authorization and backend effects",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP28",
      "responsibility": "Tenant isolation",
      "host": "Keeps local users/workspaces separate",
      "client": "Carries correct identity context",
      "server": "Primary enforcement point for remote multi-tenant data",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP29",
      "responsibility": "Underlying system permissions",
      "host": "Should request least privilege",
      "client": "Does not replace backend authorization",
      "server": "Must preserve or enforce API/database/filesystem permissions",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    },
    {
      "recordId": "R5-RESP30",
      "responsibility": "Current product compatibility",
      "host": "May support only a subset of MCP features",
      "client": "Implements selected versions/transports",
      "server": "Must not assume optional host features",
      "sourceIds": [
        "S121"
      ],
      "packageSourceIds": [
        "S001"
      ]
    }
  ]
}