{
  "title": "MCP vs Function Calling — 29-Dimension Comparison",
  "schemaVersion": "1.0",
  "researchFreeze": "2026-08-25",
  "protocolRevision": "2026-07-28",
  "interpretationNote": "Rows describe typical architectural responsibilities and explicitly stated qualifications, not universal product behavior.",
  "count": 29,
  "records": [
    {
      "Property": "Primary concern",
      "Native function calling": "Model-facing structured action selection",
      "MCP": "Client–server capability interoperability",
      "Notes": "They operate at different layers."
    },
    {
      "Property": "Core actors",
      "Native function calling": "Model provider API and application",
      "MCP": "Host, MCP client, MCP server",
      "Notes": "A product can hide or combine roles."
    },
    {
      "Property": "Capability owner",
      "Native function calling": "Usually application or provider",
      "MCP": "Server implementation",
      "Notes": "Hosts may filter or rename server tools."
    },
    {
      "Property": "Discovery",
      "Native function calling": "Application submits definitions; provider tool search may defer/load them",
      "MCP": "Client lists tools or discovers server capabilities",
      "Notes": "Direct tools are no longer necessarily static."
    },
    {
      "Property": "Model required",
      "Native function calling": "Normally yes",
      "MCP": "No",
      "Notes": "Programs can call MCP methods directly."
    },
    {
      "Property": "Server required",
      "Native function calling": "No",
      "MCP": "Yes, logically",
      "Notes": "The server can be remote, local, or in-process."
    },
    {
      "Property": "Transport",
      "Native function calling": "Provider API protocol",
      "MCP": "stdio, Streamable HTTP, or conforming/custom transport",
      "Notes": "Original HTTP+SSE is deprecated."
    },
    {
      "Property": "Wire basis",
      "Native function calling": "Provider-specific objects",
      "MCP": "JSON-RPC 2.0 plus MCP semantics",
      "Notes": "JSON-RPC itself is not MCP."
    },
    {
      "Property": "Invocation",
      "Native function calling": "Provider-specific tool/function call item",
      "MCP": "tools/call",
      "Notes": "Hosts map between the two."
    },
    {
      "Property": "Execution",
      "Native function calling": "Application, provider, or framework depending on tool type",
      "MCP": "MCP server implementation",
      "Notes": "The model itself does not execute arbitrary custom code."
    },
    {
      "Property": "Underlying operation",
      "Native function calling": "Local code or external system",
      "MCP": "Often REST, GraphQL, database, SDK, CLI, or local code",
      "Notes": "Neither replaces underlying APIs."
    },
    {
      "Property": "Input schema",
      "Native function calling": "Provider-supported JSON Schema subset or proprietary form",
      "MCP": "Valid JSON Schema; 2026 default dialect 2020-12",
      "Notes": "Conversion may be lossy."
    },
    {
      "Property": "Output schema",
      "Native function calling": "Provider-specific structured-output mechanisms",
      "MCP": "Optional outputSchema and structuredContent",
      "Notes": "MCP structuredContent is not model structured output."
    },
    {
      "Property": "Resources",
      "Native function calling": "Not inherent",
      "MCP": "Native primitive",
      "Notes": "Resources are URI-oriented context/data."
    },
    {
      "Property": "Prompts",
      "Native function calling": "Not inherent",
      "MCP": "Native primitive",
      "Notes": "Protocol prompts are not system prompts generally."
    },
    {
      "Property": "Authorization",
      "Native function calling": "Application/provider-specific",
      "MCP": "Defined framework for HTTP remote servers",
      "Notes": "OAuth does not guarantee tool safety."
    },
    {
      "Property": "Versioning",
      "Native function calling": "Provider API/model/SDK versions",
      "MCP": "Date-based protocol revisions and extension versions",
      "Notes": "Version matters for lifecycle and transport claims."
    },
    {
      "Property": "Reuse across hosts",
      "Native function calling": "Requires common library, API, or adapters",
      "MCP": "Primary design objective",
      "Notes": "Reuse is not identical behavior."
    },
    {
      "Property": "Portability",
      "Native function calling": "Native formats vary by provider",
      "MCP": "Server can serve compatible clients",
      "Notes": "Optional features and host rules remain."
    },
    {
      "Property": "Tool-name scope",
      "Native function calling": "Provider/application scope",
      "MCP": "Unique within one server",
      "Notes": "Aggregators need collision handling."
    },
    {
      "Property": "Human approval",
      "Native function calling": "Application/provider feature",
      "MCP": "Host responsibility with protocol guidance",
      "Notes": "Not enforced by descriptions alone."
    },
    {
      "Property": "Protocol state",
      "Native function calling": "No independent standardized tool session",
      "MCP": "2026 core is sessionless",
      "Notes": "Applications on both sides may retain state."
    },
    {
      "Property": "Long-running work",
      "Native function calling": "Application or provider orchestration",
      "MCP": "Ordinary calls or Tasks extension",
      "Notes": "Tasks were not present at launch."
    },
    {
      "Property": "Parallelism",
      "Native function calling": "Provider-specific controls",
      "MCP": "Concurrent requests; no current JSON-RPC batching",
      "Notes": "Batching was added March 2025 and removed June 2025."
    },
    {
      "Property": "Error model",
      "Native function calling": "Provider/application-specific",
      "MCP": "JSON-RPC errors plus tool-result error semantics",
      "Notes": "Adapters must map errors."
    },
    {
      "Property": "Latency",
      "Native function calling": "Can be shortest for in-process tools",
      "MCP": "May add in-process, IPC, or network boundary",
      "Notes": "Actual topology must be measured."
    },
    {
      "Property": "Context cost",
      "Native function calling": "Tool definitions consume context unless deferred",
      "MCP": "Discovered tools consume context if host exposes them",
      "Notes": "Tool search/filtering can reduce catalog size."
    },
    {
      "Property": "Security guarantee",
      "Native function calling": "None from schema alone",
      "MCP": "None from protocol compliance alone",
      "Notes": "Security is layered."
    },
    {
      "Property": "Best fit",
      "Native function calling": "Small, tightly coupled, application-owned tools",
      "MCP": "Shared, independently operated, discoverable integrations",
      "Notes": "Hybrid architecture is common."
    }
  ]
}