{
  "title": "MCP Tools vs Resources vs Prompts — Comparison Matrix",
  "schemaVersion": "1.0",
  "researchFreeze": "2026-08-26",
  "protocolRevision": "2026-07-28",
  "count": 25,
  "records": [
    {
      "id": "R6-CMP01",
      "dimension": "Primary purpose",
      "tools": "Perform or request operations",
      "resources": "Expose reusable, addressable data",
      "prompts": "Return reusable message templates"
    },
    {
      "id": "R6-CMP02",
      "dimension": "Intended control model",
      "tools": "Model-controlled through host policy",
      "resources": "Application-driven",
      "prompts": "User-controlled"
    },
    {
      "id": "R6-CMP03",
      "dimension": "Primary identifier",
      "tools": "Name",
      "resources": "URI",
      "prompts": "Name"
    },
    {
      "id": "R6-CMP04",
      "dimension": "Discovery method",
      "tools": "tools/list",
      "resources": "resources/list and resources/templates/list",
      "prompts": "prompts/list"
    },
    {
      "id": "R6-CMP05",
      "dimension": "Use method",
      "tools": "tools/call",
      "resources": "resources/read",
      "prompts": "prompts/get"
    },
    {
      "id": "R6-CMP06",
      "dimension": "Input model",
      "tools": "JSON Schema inputSchema",
      "resources": "URI or URI-template variables",
      "prompts": "Named arguments"
    },
    {
      "id": "R6-CMP07",
      "dimension": "Output model",
      "tools": "Content blocks plus optional structuredContent",
      "resources": "Text or binary ResourceContents",
      "prompts": "User/assistant message sequence"
    },
    {
      "id": "R6-CMP08",
      "dimension": "Side effects",
      "tools": "May have side effects",
      "resources": "Read should represent retrieval",
      "prompts": "Retrieval should not execute downstream workflow"
    },
    {
      "id": "R6-CMP09",
      "dimension": "Stable data identity",
      "tools": "Not central",
      "resources": "Central",
      "prompts": "Template identity, not data identity"
    },
    {
      "id": "R6-CMP10",
      "dimension": "Current list caching",
      "tools": "Yes",
      "resources": "Yes",
      "prompts": "Yes"
    },
    {
      "id": "R6-CMP11",
      "dimension": "Current read caching",
      "tools": "No universal execution cache",
      "resources": "Yes",
      "prompts": "No universal get cache"
    },
    {
      "id": "R6-CMP12",
      "dimension": "Current MRTR support",
      "tools": "tools/call may return input_required",
      "resources": "resources/read may return input_required where supported",
      "prompts": "prompts/get may return input_required"
    },
    {
      "id": "R6-CMP13",
      "dimension": "Structured schema output",
      "tools": "Optional outputSchema and structuredContent",
      "resources": "Typed content plus MIME metadata",
      "prompts": "Structured messages, not tool output schema"
    },
    {
      "id": "R6-CMP14",
      "dimension": "Resource links",
      "tools": "May return links",
      "resources": "Native identity",
      "prompts": "May include links"
    },
    {
      "id": "R6-CMP15",
      "dimension": "Embedded resources",
      "tools": "May embed",
      "resources": "Native content",
      "prompts": "May embed"
    },
    {
      "id": "R6-CMP16",
      "dimension": "Templates",
      "tools": "Tool schemas, not URI templates",
      "resources": "Resource templates are first-class",
      "prompts": "Prompt templates are first-class"
    },
    {
      "id": "R6-CMP17",
      "dimension": "Update semantics",
      "tools": "Catalog change signal",
      "resources": "Catalog change plus item update signals",
      "prompts": "Catalog change signal"
    },
    {
      "id": "R6-CMP18",
      "dimension": "Typical host UI",
      "tools": "Model catalog and confirmation",
      "resources": "Context picker/viewer",
      "prompts": "Slash command/menu"
    },
    {
      "id": "R6-CMP19",
      "dimension": "Principal trust issue",
      "tools": "Authority and misleading descriptions",
      "resources": "Data disclosure and poisoned content",
      "prompts": "Untrusted instructions and hidden assumptions"
    },
    {
      "id": "R6-CMP20",
      "dimension": "Best fit",
      "tools": "Dynamic action/query",
      "resources": "Durable context object",
      "prompts": "Explicit reusable workflow"
    },
    {
      "id": "R6-CMP21",
      "dimension": "Can work without an LLM",
      "tools": "Yes",
      "resources": "Yes",
      "prompts": "Yes, though messages target model workflows"
    },
    {
      "id": "R6-CMP22",
      "dimension": "Can be combined",
      "tools": "Can create/link/embed resources",
      "resources": "Can be embedded or linked",
      "prompts": "Can embed resources and lead to tools"
    },
    {
      "id": "R6-CMP23",
      "dimension": "Host support consistency",
      "tools": "Generally strongest",
      "resources": "Uneven",
      "prompts": "Uneven"
    },
    {
      "id": "R6-CMP24",
      "dimension": "Current routing headers",
      "tools": "Mcp-Method, Mcp-Name and x-mcp-header parameters",
      "resources": "Method-level HTTP routing",
      "prompts": "Method-level HTTP routing"
    },
    {
      "id": "R6-CMP25",
      "dimension": "Canonical design question",
      "tools": "What work should the server perform?",
      "resources": "What data object should the app identify/load?",
      "prompts": "What repeatable interaction should the user start?"
    }
  ]
}