{
  "type": "comparison",
  "id": "mcp-server-frameworks",
  "title": "MCP server frameworks compared: FastMCP vs mcp-use vs the official Python and TypeScript SDKs",
  "summary": "Four ways to build an MCP server in 2026: the official Python SDK (v2) and TypeScript SDK (v2), Prefect's FastMCP and Manufact's mcp-use. Covers languages, schemas, transports, auth, MCP Apps (UI), local testing, deployment and license.",
  "author": "Agentica Author",
  "tags": [
    "mcp",
    "sdk",
    "framework",
    "python",
    "typescript",
    "mcp-apps",
    "oauth",
    "server-development"
  ],
  "published": "2026-10-26",
  "last_verified": "2026-10-26",
  "entries": [
    "mcp-python-sdk",
    "mcp-typescript-sdk",
    "fastmcp",
    "mcp-use",
    "mcp-go-sdk",
    "mcp-inspector",
    "model-context-protocol",
    "mcp-authorization",
    "fast-agent"
  ],
  "links": {
    "html": "https://indexagentica.com/compare/mcp-server-frameworks/",
    "markdown": "https://indexagentica.com/compare/mcp-server-frameworks.md",
    "json": "https://indexagentica.com/api/longform/compare/mcp-server-frameworks.json",
    "source": "https://github.com/Drudley/indexagentica/blob/main/content-long/compare/mcp-server-frameworks.md"
  },
  "status": "published",
  "comparison": {
    "subjects": [
      {
        "id": "mcp-python-sdk",
        "name": "MCP Python SDK",
        "summary": "Official Python SDK for building Model Context Protocol servers and clients.",
        "url": "https://indexagentica.com/entries/mcp-python-sdk/",
        "json": "https://indexagentica.com/api/entries/mcp-python-sdk.json"
      },
      {
        "id": "mcp-typescript-sdk",
        "name": "MCP TypeScript SDK",
        "summary": "Official TypeScript SDK for building MCP servers and clients on Node.js, Bun and Deno; v2 ships as @modelcontextprotocol/server and @modelcontextprotocol/client.",
        "url": "https://indexagentica.com/entries/mcp-typescript-sdk/",
        "json": "https://indexagentica.com/api/entries/mcp-typescript-sdk.json"
      },
      {
        "id": "fastmcp",
        "name": "FastMCP",
        "summary": "The fast, Pythonic framework for building MCP servers, clients and interactive applications.",
        "url": "https://indexagentica.com/entries/fastmcp/",
        "json": "https://indexagentica.com/api/entries/fastmcp.json"
      },
      {
        "id": "mcp-use",
        "name": "mcp-use",
        "summary": "Full-stack MCP framework (TypeScript and Python) for building MCP servers and MCP Apps with typed tools, React views, a built-in Inspector and agent clients.",
        "url": "https://indexagentica.com/entries/mcp-use/",
        "json": "https://indexagentica.com/api/entries/mcp-use.json"
      }
    ],
    "criteria": [
      "Language and package",
      "Defining a tool",
      "Transports",
      "Server auth",
      "MCP Apps (UI)",
      "Local testing",
      "Deploy story",
      "License"
    ],
    "rows": {
      "mcp-python-sdk": {
        "Language and package": "Python; PyPI mcp 2.3.0 (README: Python 3.11+). v2 API: from mcp.server import MCPServer",
        "Defining a tool": "@mcp.tool() on a type-hinted function; schema and validation generated from the hints",
        "Transports": "stdio, Streamable HTTP and SSE; the same package includes a full Client",
        "Server auth": "Resource-server pattern: implement TokenVerifier to check OAuth 2.1 bearer tokens; client-side OAuth helpers",
        "MCP Apps (UI)": "Yes, as the built-in Apps extension (io.modelcontextprotocol/ui)",
        "Local testing": "mcp dev server.py opens the server in MCP Inspector (cli extra)",
        "Deploy story": "Any host that runs a Python web service; mcp run --transport streamable-http",
        "License": "MIT"
      },
      "mcp-typescript-sdk": {
        "Language and package": "TypeScript on Node.js, Bun and Deno; v2 @modelcontextprotocol/server 2.4.0 and @modelcontextprotocol/client (Node >=20). v1 @modelcontextprotocol/sdk 1.32.2 on the v1.x branch",
        "Defining a tool": "server.registerTool(name, {inputSchema}, handler); schemas via Standard Schema (Zod v4, Valibot, ArkType)",
        "Transports": "stdio and Streamable HTTP; thin middleware for Node http, Express, Fastify and Hono",
        "Server auth": "Bearer-token verification with protected-resource metadata and per-operation scopes; client OAuth and machine auth (client credentials, private-key JWT, cross-app access)",
        "MCP Apps (UI)": "Not listed in the v2 docs index",
        "Local testing": "None built in; use MCP Inspector",
        "Deploy story": "Any JS runtime; you wire the HTTP framework",
        "License": "Apache-2.0 for v2 (repo is moving from MIT to Apache-2.0; v1 package MIT)"
      },
      "fastmcp": {
        "Language and package": "Python; PyPI fastmcp 4.1.3 (Python >=3.10). TypeScript counterpart: @prefecthq/fastmcp-ts",
        "Defining a tool": "@mcp.tool on a plain function; schema, validation and docs generated",
        "Transports": "stdio and HTTP; clients connect by URL with transport negotiation handled",
        "Server auth": "API keys up to full OAuth 2.1: token verification, remote OAuth (Descope, WorkOS, Auth0, SSO), OAuth and OIDC proxies, a full OAuth server, multiple auth sources, component-level authorization",
        "MCP Apps (UI)": "Yes (Apps pillar: interactive UIs rendered in the conversation)",
        "Local testing": "FastMCP Client connects to any server, programmatically or from the CLI; docs cover AI-assisted development",
        "Deploy story": "HTTP deployment, fastmcp.json project config; Prefect Horizon (commercial gateway and hosting from the same team)",
        "License": "Apache-2.0"
      },
      "mcp-use": {
        "Language and package": "TypeScript first (npm mcp-use 2.11.2, Node >=22.22.2; scaffold with create-mcp-use-app) plus a Python package (PyPI mcp-use 1.7.1)",
        "Defining a tool": "server.tool({name, inputSchema, outputSchema, view}, handler) with Zod; typed structured results",
        "Transports": "Streamable HTTP servers; Redis-backed session storage for distributed deployments",
        "Server auth": "OAuth providers: Auth0, Better Auth, Clerk, Keycloak, Supabase, WorkOS, an OAuth proxy, or custom DCR",
        "MCP Apps (UI)": "Yes: React Views bound to tools (ChatGPT apps, Claude connectors)",
        "Local testing": "Built-in Inspector at /mcp/inspector in dev, plus a hosted Inspector and headless CLI",
        "Deploy story": "Manufact Cloud (one-click), Google Cloud Run and other hosts",
        "License": "MIT"
      }
    },
    "table": [
      {
        "entry": "mcp-python-sdk",
        "name": "MCP Python SDK",
        "url": "https://indexagentica.com/entries/mcp-python-sdk/",
        "values": {
          "Language and package": "Python; PyPI mcp 2.3.0 (README: Python 3.11+). v2 API: from mcp.server import MCPServer",
          "Defining a tool": "@mcp.tool() on a type-hinted function; schema and validation generated from the hints",
          "Transports": "stdio, Streamable HTTP and SSE; the same package includes a full Client",
          "Server auth": "Resource-server pattern: implement TokenVerifier to check OAuth 2.1 bearer tokens; client-side OAuth helpers",
          "MCP Apps (UI)": "Yes, as the built-in Apps extension (io.modelcontextprotocol/ui)",
          "Local testing": "mcp dev server.py opens the server in MCP Inspector (cli extra)",
          "Deploy story": "Any host that runs a Python web service; mcp run --transport streamable-http",
          "License": "MIT"
        }
      },
      {
        "entry": "mcp-typescript-sdk",
        "name": "MCP TypeScript SDK",
        "url": "https://indexagentica.com/entries/mcp-typescript-sdk/",
        "values": {
          "Language and package": "TypeScript on Node.js, Bun and Deno; v2 @modelcontextprotocol/server 2.4.0 and @modelcontextprotocol/client (Node >=20). v1 @modelcontextprotocol/sdk 1.32.2 on the v1.x branch",
          "Defining a tool": "server.registerTool(name, {inputSchema}, handler); schemas via Standard Schema (Zod v4, Valibot, ArkType)",
          "Transports": "stdio and Streamable HTTP; thin middleware for Node http, Express, Fastify and Hono",
          "Server auth": "Bearer-token verification with protected-resource metadata and per-operation scopes; client OAuth and machine auth (client credentials, private-key JWT, cross-app access)",
          "MCP Apps (UI)": "Not listed in the v2 docs index",
          "Local testing": "None built in; use MCP Inspector",
          "Deploy story": "Any JS runtime; you wire the HTTP framework",
          "License": "Apache-2.0 for v2 (repo is moving from MIT to Apache-2.0; v1 package MIT)"
        }
      },
      {
        "entry": "fastmcp",
        "name": "FastMCP",
        "url": "https://indexagentica.com/entries/fastmcp/",
        "values": {
          "Language and package": "Python; PyPI fastmcp 4.1.3 (Python >=3.10). TypeScript counterpart: @prefecthq/fastmcp-ts",
          "Defining a tool": "@mcp.tool on a plain function; schema, validation and docs generated",
          "Transports": "stdio and HTTP; clients connect by URL with transport negotiation handled",
          "Server auth": "API keys up to full OAuth 2.1: token verification, remote OAuth (Descope, WorkOS, Auth0, SSO), OAuth and OIDC proxies, a full OAuth server, multiple auth sources, component-level authorization",
          "MCP Apps (UI)": "Yes (Apps pillar: interactive UIs rendered in the conversation)",
          "Local testing": "FastMCP Client connects to any server, programmatically or from the CLI; docs cover AI-assisted development",
          "Deploy story": "HTTP deployment, fastmcp.json project config; Prefect Horizon (commercial gateway and hosting from the same team)",
          "License": "Apache-2.0"
        }
      },
      {
        "entry": "mcp-use",
        "name": "mcp-use",
        "url": "https://indexagentica.com/entries/mcp-use/",
        "values": {
          "Language and package": "TypeScript first (npm mcp-use 2.11.2, Node >=22.22.2; scaffold with create-mcp-use-app) plus a Python package (PyPI mcp-use 1.7.1)",
          "Defining a tool": "server.tool({name, inputSchema, outputSchema, view}, handler) with Zod; typed structured results",
          "Transports": "Streamable HTTP servers; Redis-backed session storage for distributed deployments",
          "Server auth": "OAuth providers: Auth0, Better Auth, Clerk, Keycloak, Supabase, WorkOS, an OAuth proxy, or custom DCR",
          "MCP Apps (UI)": "Yes: React Views bound to tools (ChatGPT apps, Claude connectors)",
          "Local testing": "Built-in Inspector at /mcp/inspector in dev, plus a hosted Inspector and headless CLI",
          "Deploy story": "Manufact Cloud (one-click), Google Cloud Run and other hosts",
          "License": "MIT"
        }
      }
    ],
    "verdict": "Writing Python and want the reference implementation with few dependencies? Use the official SDK v2, which now has MCPServer, a client and MCP Apps. Need production auth (OAuth proxies, SSO, multiple token sources) in Python? FastMCP has the most auth options. In TypeScript, use the official v2 SDK when you want Standard Schema and your own HTTP framework. Pick mcp-use when you're building an MCP App with React views and want an inspector and deploy flow out of the box."
  },
  "entries_detail": [
    {
      "id": "mcp-python-sdk",
      "name": "MCP Python SDK",
      "summary": "Official Python SDK for building Model Context Protocol servers and clients.",
      "url": "https://indexagentica.com/entries/mcp-python-sdk/",
      "json": "https://indexagentica.com/api/entries/mcp-python-sdk.json"
    },
    {
      "id": "mcp-typescript-sdk",
      "name": "MCP TypeScript SDK",
      "summary": "Official TypeScript SDK for building MCP servers and clients on Node.js, Bun and Deno; v2 ships as @modelcontextprotocol/server and @modelcontextprotocol/client.",
      "url": "https://indexagentica.com/entries/mcp-typescript-sdk/",
      "json": "https://indexagentica.com/api/entries/mcp-typescript-sdk.json"
    },
    {
      "id": "fastmcp",
      "name": "FastMCP",
      "summary": "The fast, Pythonic framework for building MCP servers, clients and interactive applications.",
      "url": "https://indexagentica.com/entries/fastmcp/",
      "json": "https://indexagentica.com/api/entries/fastmcp.json"
    },
    {
      "id": "mcp-use",
      "name": "mcp-use",
      "summary": "Full-stack MCP framework (TypeScript and Python) for building MCP servers and MCP Apps with typed tools, React views, a built-in Inspector and agent clients.",
      "url": "https://indexagentica.com/entries/mcp-use/",
      "json": "https://indexagentica.com/api/entries/mcp-use.json"
    },
    {
      "id": "mcp-go-sdk",
      "name": "MCP Go SDK",
      "summary": "Official Go SDK for Model Context Protocol servers and clients, maintained in collaboration with Google.",
      "url": "https://indexagentica.com/entries/mcp-go-sdk/",
      "json": "https://indexagentica.com/api/entries/mcp-go-sdk.json"
    },
    {
      "id": "mcp-inspector",
      "name": "MCP Inspector",
      "summary": "Official interactive developer tool for testing and debugging MCP servers in the browser, on the command line or in the terminal.",
      "url": "https://indexagentica.com/entries/mcp-inspector/",
      "json": "https://indexagentica.com/api/entries/mcp-inspector.json"
    },
    {
      "id": "model-context-protocol",
      "name": "Model Context Protocol (MCP)",
      "summary": "Open protocol that standardizes how AI applications connect to external tools, data sources and prompts via MCP servers.",
      "url": "https://indexagentica.com/entries/model-context-protocol/",
      "json": "https://indexagentica.com/api/entries/model-context-protocol.json"
    },
    {
      "id": "mcp-authorization",
      "name": "MCP Authorization (OAuth 2.1 for MCP)",
      "summary": "The MCP specification's transport-level authorization flow for HTTP-based MCP servers, based on a subset of OAuth 2.1 and related RFCs.",
      "url": "https://indexagentica.com/entries/mcp-authorization/",
      "json": "https://indexagentica.com/api/entries/mcp-authorization.json"
    },
    {
      "id": "fast-agent",
      "name": "fast-agent",
      "summary": "CLI-first Python agent harness and framework with end-to-end MCP support (sampling, elicitation, OAuth), Agent Skills, ACP and declarative multi-agent workflows.",
      "url": "https://indexagentica.com/entries/fast-agent/",
      "json": "https://indexagentica.com/api/entries/fast-agent.json"
    }
  ],
  "related": [
    {
      "type": "guide",
      "id": "publish-an-mcp-server",
      "title": "Publish an MCP server so agents can find it",
      "url": "https://indexagentica.com/guides/publish-an-mcp-server/",
      "json": "https://indexagentica.com/api/longform/guides/publish-an-mcp-server.json"
    },
    {
      "type": "guide",
      "id": "test-your-mcp-server",
      "title": "Test your MCP server with in-process tests and Inspector CI checks",
      "url": "https://indexagentica.com/guides/test-your-mcp-server/",
      "json": "https://indexagentica.com/api/longform/guides/test-your-mcp-server.json"
    },
    {
      "type": "guide",
      "id": "add-oauth-to-your-mcp-server",
      "title": "Add OAuth authorization to your own MCP server",
      "url": "https://indexagentica.com/guides/add-oauth-to-your-mcp-server/",
      "json": "https://indexagentica.com/api/longform/guides/add-oauth-to-your-mcp-server.json"
    },
    {
      "type": "guide",
      "id": "bridge-stdio-and-remote-mcp-servers",
      "title": "Bridge stdio and remote MCP servers: mcp-remote, Supergateway, mcp-proxy and mcpo",
      "url": "https://indexagentica.com/guides/bridge-stdio-and-remote-mcp-servers/",
      "json": "https://indexagentica.com/api/longform/guides/bridge-stdio-and-remote-mcp-servers.json"
    },
    {
      "type": "guide",
      "id": "connect-an-agent-to-a-remote-mcp-server",
      "title": "Connect an agent to a remote MCP server",
      "url": "https://indexagentica.com/guides/connect-an-agent-to-a-remote-mcp-server/",
      "json": "https://indexagentica.com/api/longform/guides/connect-an-agent-to-a-remote-mcp-server.json"
    },
    {
      "type": "comparison",
      "id": "mcp-gateways",
      "title": "MCP gateways compared",
      "url": "https://indexagentica.com/compare/mcp-gateways/",
      "json": "https://indexagentica.com/api/longform/compare/mcp-gateways.json"
    },
    {
      "type": "comparison",
      "id": "work-management-mcp-servers",
      "title": "Work-management MCP servers compared: Asana vs monday.com vs Linear vs Notion vs Atlassian",
      "url": "https://indexagentica.com/compare/work-management-mcp-servers/",
      "json": "https://indexagentica.com/api/longform/compare/work-management-mcp-servers.json"
    }
  ],
  "sources": [
    {
      "title": "MCP Python SDK README",
      "url": "https://github.com/modelcontextprotocol/python-sdk",
      "accessed": "2026-10-26"
    },
    {
      "title": "MCP Python SDK docs: MCP Apps",
      "url": "https://py.sdk.modelcontextprotocol.io/advanced/apps/index.md",
      "accessed": "2026-10-26"
    },
    {
      "title": "MCP Python SDK docs: Authorization",
      "url": "https://py.sdk.modelcontextprotocol.io/run/authorization/index.md",
      "accessed": "2026-10-26"
    },
    {
      "title": "PyPI: mcp",
      "url": "https://pypi.org/project/mcp/",
      "accessed": "2026-10-26"
    },
    {
      "title": "MCP TypeScript SDK README",
      "url": "https://github.com/modelcontextprotocol/typescript-sdk",
      "accessed": "2026-10-26"
    },
    {
      "title": "MCP TypeScript SDK v2 docs index",
      "url": "https://ts.sdk.modelcontextprotocol.io/v2/llms.txt",
      "accessed": "2026-10-26"
    },
    {
      "title": "npm: @modelcontextprotocol/server",
      "url": "https://www.npmjs.com/package/@modelcontextprotocol/server",
      "accessed": "2026-10-26"
    },
    {
      "title": "FastMCP README",
      "url": "https://github.com/PrefectHQ/fastmcp",
      "accessed": "2026-10-26"
    },
    {
      "title": "FastMCP docs index",
      "url": "https://gofastmcp.com/llms.txt",
      "accessed": "2026-10-26"
    },
    {
      "title": "PyPI: fastmcp",
      "url": "https://pypi.org/project/fastmcp/",
      "accessed": "2026-10-26"
    },
    {
      "title": "mcp-use README",
      "url": "https://github.com/mcp-use/mcp-use",
      "accessed": "2026-10-26"
    },
    {
      "title": "mcp-use docs index",
      "url": "https://docs.mcp-use.com/llms.txt",
      "accessed": "2026-10-26"
    },
    {
      "title": "npm: mcp-use",
      "url": "https://www.npmjs.com/package/mcp-use",
      "accessed": "2026-10-26"
    }
  ],
  "front_matter": {
    "id": "mcp-server-frameworks",
    "type": "comparison",
    "title": "MCP server frameworks compared: FastMCP vs mcp-use vs the official Python and TypeScript SDKs",
    "summary": "Four ways to build an MCP server in 2026: the official Python SDK (v2) and TypeScript SDK (v2), Prefect's FastMCP and Manufact's mcp-use. Covers languages, schemas, transports, auth, MCP Apps (UI), local testing, deployment and license.",
    "description": "A primary-source comparison of MCP server frameworks, checked on 2026-10-26 against each project's README, documentation index and package registry (PyPI and npm). It covers the two official SDKs and the two most visible higher-level frameworks. Download and adoption figures are the projects' own claims. No framework was benchmarked here.",
    "author": "Agentica Author",
    "tags": [
      "mcp",
      "sdk",
      "framework",
      "python",
      "typescript",
      "mcp-apps",
      "oauth",
      "server-development"
    ],
    "entries": [
      "mcp-python-sdk",
      "mcp-typescript-sdk",
      "fastmcp",
      "mcp-use",
      "mcp-go-sdk",
      "mcp-inspector",
      "model-context-protocol",
      "mcp-authorization",
      "fast-agent"
    ],
    "related": [
      "publish-an-mcp-server",
      "test-your-mcp-server",
      "add-oauth-to-your-mcp-server",
      "bridge-stdio-and-remote-mcp-servers",
      "connect-an-agent-to-a-remote-mcp-server",
      "mcp-gateways",
      "work-management-mcp-servers"
    ],
    "subjects": [
      "mcp-python-sdk",
      "mcp-typescript-sdk",
      "fastmcp",
      "mcp-use"
    ],
    "criteria": [
      "Language and package",
      "Defining a tool",
      "Transports",
      "Server auth",
      "MCP Apps (UI)",
      "Local testing",
      "Deploy story",
      "License"
    ],
    "rows": {
      "mcp-python-sdk": {
        "Language and package": "Python; PyPI mcp 2.3.0 (README: Python 3.11+). v2 API: from mcp.server import MCPServer",
        "Defining a tool": "@mcp.tool() on a type-hinted function; schema and validation generated from the hints",
        "Transports": "stdio, Streamable HTTP and SSE; the same package includes a full Client",
        "Server auth": "Resource-server pattern: implement TokenVerifier to check OAuth 2.1 bearer tokens; client-side OAuth helpers",
        "MCP Apps (UI)": "Yes, as the built-in Apps extension (io.modelcontextprotocol/ui)",
        "Local testing": "mcp dev server.py opens the server in MCP Inspector (cli extra)",
        "Deploy story": "Any host that runs a Python web service; mcp run --transport streamable-http",
        "License": "MIT"
      },
      "mcp-typescript-sdk": {
        "Language and package": "TypeScript on Node.js, Bun and Deno; v2 @modelcontextprotocol/server 2.4.0 and @modelcontextprotocol/client (Node >=20). v1 @modelcontextprotocol/sdk 1.32.2 on the v1.x branch",
        "Defining a tool": "server.registerTool(name, {inputSchema}, handler); schemas via Standard Schema (Zod v4, Valibot, ArkType)",
        "Transports": "stdio and Streamable HTTP; thin middleware for Node http, Express, Fastify and Hono",
        "Server auth": "Bearer-token verification with protected-resource metadata and per-operation scopes; client OAuth and machine auth (client credentials, private-key JWT, cross-app access)",
        "MCP Apps (UI)": "Not listed in the v2 docs index",
        "Local testing": "None built in; use MCP Inspector",
        "Deploy story": "Any JS runtime; you wire the HTTP framework",
        "License": "Apache-2.0 for v2 (repo is moving from MIT to Apache-2.0; v1 package MIT)"
      },
      "fastmcp": {
        "Language and package": "Python; PyPI fastmcp 4.1.3 (Python >=3.10). TypeScript counterpart: @prefecthq/fastmcp-ts",
        "Defining a tool": "@mcp.tool on a plain function; schema, validation and docs generated",
        "Transports": "stdio and HTTP; clients connect by URL with transport negotiation handled",
        "Server auth": "API keys up to full OAuth 2.1: token verification, remote OAuth (Descope, WorkOS, Auth0, SSO), OAuth and OIDC proxies, a full OAuth server, multiple auth sources, component-level authorization",
        "MCP Apps (UI)": "Yes (Apps pillar: interactive UIs rendered in the conversation)",
        "Local testing": "FastMCP Client connects to any server, programmatically or from the CLI; docs cover AI-assisted development",
        "Deploy story": "HTTP deployment, fastmcp.json project config; Prefect Horizon (commercial gateway and hosting from the same team)",
        "License": "Apache-2.0"
      },
      "mcp-use": {
        "Language and package": "TypeScript first (npm mcp-use 2.11.2, Node >=22.22.2; scaffold with create-mcp-use-app) plus a Python package (PyPI mcp-use 1.7.1)",
        "Defining a tool": "server.tool({name, inputSchema, outputSchema, view}, handler) with Zod; typed structured results",
        "Transports": "Streamable HTTP servers; Redis-backed session storage for distributed deployments",
        "Server auth": "OAuth providers: Auth0, Better Auth, Clerk, Keycloak, Supabase, WorkOS, an OAuth proxy, or custom DCR",
        "MCP Apps (UI)": "Yes: React Views bound to tools (ChatGPT apps, Claude connectors)",
        "Local testing": "Built-in Inspector at /mcp/inspector in dev, plus a hosted Inspector and headless CLI",
        "Deploy story": "Manufact Cloud (one-click), Google Cloud Run and other hosts",
        "License": "MIT"
      }
    },
    "verdict": "Writing Python and want the reference implementation with few dependencies? Use the official SDK v2, which now has MCPServer, a client and MCP Apps. Need production auth (OAuth proxies, SSO, multiple token sources) in Python? FastMCP has the most auth options. In TypeScript, use the official v2 SDK when you want Standard Schema and your own HTTP framework. Pick mcp-use when you're building an MCP App with React views and want an inspector and deploy flow out of the box.",
    "sources": [
      {
        "title": "MCP Python SDK README",
        "url": "https://github.com/modelcontextprotocol/python-sdk",
        "accessed": "2026-10-26"
      },
      {
        "title": "MCP Python SDK docs: MCP Apps",
        "url": "https://py.sdk.modelcontextprotocol.io/advanced/apps/index.md",
        "accessed": "2026-10-26"
      },
      {
        "title": "MCP Python SDK docs: Authorization",
        "url": "https://py.sdk.modelcontextprotocol.io/run/authorization/index.md",
        "accessed": "2026-10-26"
      },
      {
        "title": "PyPI: mcp",
        "url": "https://pypi.org/project/mcp/",
        "accessed": "2026-10-26"
      },
      {
        "title": "MCP TypeScript SDK README",
        "url": "https://github.com/modelcontextprotocol/typescript-sdk",
        "accessed": "2026-10-26"
      },
      {
        "title": "MCP TypeScript SDK v2 docs index",
        "url": "https://ts.sdk.modelcontextprotocol.io/v2/llms.txt",
        "accessed": "2026-10-26"
      },
      {
        "title": "npm: @modelcontextprotocol/server",
        "url": "https://www.npmjs.com/package/@modelcontextprotocol/server",
        "accessed": "2026-10-26"
      },
      {
        "title": "FastMCP README",
        "url": "https://github.com/PrefectHQ/fastmcp",
        "accessed": "2026-10-26"
      },
      {
        "title": "FastMCP docs index",
        "url": "https://gofastmcp.com/llms.txt",
        "accessed": "2026-10-26"
      },
      {
        "title": "PyPI: fastmcp",
        "url": "https://pypi.org/project/fastmcp/",
        "accessed": "2026-10-26"
      },
      {
        "title": "mcp-use README",
        "url": "https://github.com/mcp-use/mcp-use",
        "accessed": "2026-10-26"
      },
      {
        "title": "mcp-use docs index",
        "url": "https://docs.mcp-use.com/llms.txt",
        "accessed": "2026-10-26"
      },
      {
        "title": "npm: mcp-use",
        "url": "https://www.npmjs.com/package/mcp-use",
        "accessed": "2026-10-26"
      }
    ],
    "last_verified": "2026-10-26",
    "published": "2026-10-26"
  },
  "markdown": "\nEach of these four turns a function into an MCP tool. They differ in everything around that: auth, UI, testing and deployment. The official SDKs track the spec and keep dependencies light. FastMCP and mcp-use add batteries on top.\n\n## The official SDKs grew up\n\nBoth official SDKs shipped a v2 in 2026, and they look much more like the frameworks than v1 did:\n\n- The [Python SDK](https://indexagentica.com/entries/mcp-python-sdk/) v2 has an `MCPServer` class with decorator tools (`@mcp.tool()`), a `Client` that takes a URL, `mcp dev` to open the server in [MCP Inspector](https://indexagentica.com/entries/mcp-inspector/), and MCP Apps as a built-in extension. Server auth is deliberately minimal. Your server is an OAuth resource server, and you implement a `TokenVerifier`.\n- The [TypeScript SDK](https://indexagentica.com/entries/mcp-typescript-sdk/) v2 splits into `@modelcontextprotocol/server` and `@modelcontextprotocol/client`, implements the 2026-07-28 spec, and accepts any Standard Schema library (Zod v4, Valibot, ArkType). Thin middleware packages connect it to Node `http`, Express, Fastify or Hono. v1 (`@modelcontextprotocol/sdk`) still gets bug and security fixes for at least six months after the v2 release on 2026-07-27, so plan your migration.\n\nThere is also an official [Go SDK](https://indexagentica.com/entries/mcp-go-sdk/), maintained with Google, if Go is your server language.\n\n## When a framework earns its keep\n\n**Auth.** This is the biggest gap. [FastMCP](https://indexagentica.com/entries/fastmcp/) documents token verification, remote OAuth with external identity providers (Descope, WorkOS, Auth0, corporate SSO), OAuth and OIDC proxies for providers that don't support MCP's flow, a self-contained OAuth server, multiple auth sources and per-component authorization. [mcp-use](https://indexagentica.com/entries/mcp-use/) has ready-made providers for Auth0, Better Auth, Clerk, Keycloak, Supabase and WorkOS. With the official SDKs you put the authorization server together yourself. For the steps, see [Add OAuth to your MCP server](https://indexagentica.com/guides/add-oauth-to-your-mcp-server/).\n\n**UI (MCP Apps).** An MCP App is a tool plus a `ui://` HTML resource that the host renders in a sandboxed iframe. mcp-use is built around this, with React \"Views\" bound to tools and typed props. FastMCP has Apps as one of its three pillars, and the Python SDK ships an Apps extension. The TypeScript SDK's v2 docs index doesn't list it.\n\n**Testing.** mcp-use serves an Inspector at `/mcp/inspector` while you develop, and the Python SDK's `mcp dev` opens MCP Inspector. Every option can be tested with a scripted client, as in [Test your MCP server](https://indexagentica.com/guides/test-your-mcp-server/).\n\n**Deploying.** All four can run as a plain HTTP service. The two frameworks also sell hosting: Prefect Horizon from the FastMCP team (gateway, registry, SSO and RBAC) and Manufact Cloud from the mcp-use team. Both are optional. Once the server is up, [Publish an MCP server](https://indexagentica.com/guides/publish-an-mcp-server/) covers registries and listings. If you need a stdio server reachable over HTTP, or the other way round, see [Bridge stdio and remote MCP servers](https://indexagentica.com/guides/bridge-stdio-and-remote-mcp-servers/).\n\n## Adoption claims, with care\n\nFastMCP's README says FastMCP 1.0 was folded into the official Python SDK in 2024 and that \"some version of FastMCP powers 70% of MCP servers across all languages\". These are the project's own figures and were not checked here. mcp-use publishes MCP conformance badges for its Python server and client. Treat both as signals, not benchmarks.\n\n## A client to test against\n\nTo drive your server from an agent rather than an inspector, [fast-agent](https://indexagentica.com/entries/fast-agent/) connects to stdio or Streamable HTTP servers with `/connect`, supports sampling and elicitation, and includes transport diagnostics. That makes it handy for checking that a new server works end to end.\n",
  "raw": "---\nid: mcp-server-frameworks\ntype: comparison\ntitle: \"MCP server frameworks compared: FastMCP vs mcp-use vs the official Python and TypeScript SDKs\"\nsummary: \"Four ways to build an MCP server in 2026: the official Python SDK (v2) and TypeScript SDK (v2), Prefect's FastMCP and Manufact's mcp-use. Covers languages, schemas, transports, auth, MCP Apps (UI), local testing, deployment and license.\"\ndescription: \"A primary-source comparison of MCP server frameworks, checked on 2026-10-26 against each project's README, documentation index and package registry (PyPI and npm). It covers the two official SDKs and the two most visible higher-level frameworks. Download and adoption figures are the projects' own claims. No framework was benchmarked here.\"\nauthor: Agentica Author\ntags: [mcp, sdk, framework, python, typescript, mcp-apps, oauth, server-development]\nentries: [mcp-python-sdk, mcp-typescript-sdk, fastmcp, mcp-use, mcp-go-sdk, mcp-inspector, model-context-protocol, mcp-authorization, fast-agent]\nrelated: [publish-an-mcp-server, test-your-mcp-server, add-oauth-to-your-mcp-server, bridge-stdio-and-remote-mcp-servers, connect-an-agent-to-a-remote-mcp-server, mcp-gateways, work-management-mcp-servers]\nsubjects: [mcp-python-sdk, mcp-typescript-sdk, fastmcp, mcp-use]\ncriteria:\n  - Language and package\n  - Defining a tool\n  - Transports\n  - Server auth\n  - MCP Apps (UI)\n  - Local testing\n  - Deploy story\n  - License\nrows:\n  mcp-python-sdk:\n    Language and package: \"Python; PyPI mcp 2.3.0 (README: Python 3.11+). v2 API: from mcp.server import MCPServer\"\n    Defining a tool: \"@mcp.tool() on a type-hinted function; schema and validation generated from the hints\"\n    Transports: \"stdio, Streamable HTTP and SSE; the same package includes a full Client\"\n    Server auth: \"Resource-server pattern: implement TokenVerifier to check OAuth 2.1 bearer tokens; client-side OAuth helpers\"\n    MCP Apps (UI): \"Yes, as the built-in Apps extension (io.modelcontextprotocol/ui)\"\n    Local testing: \"mcp dev server.py opens the server in MCP Inspector (cli extra)\"\n    Deploy story: \"Any host that runs a Python web service; mcp run --transport streamable-http\"\n    License: \"MIT\"\n  mcp-typescript-sdk:\n    Language and package: \"TypeScript on Node.js, Bun and Deno; v2 @modelcontextprotocol/server 2.4.0 and @modelcontextprotocol/client (Node >=20). v1 @modelcontextprotocol/sdk 1.32.2 on the v1.x branch\"\n    Defining a tool: \"server.registerTool(name, {inputSchema}, handler); schemas via Standard Schema (Zod v4, Valibot, ArkType)\"\n    Transports: \"stdio and Streamable HTTP; thin middleware for Node http, Express, Fastify and Hono\"\n    Server auth: \"Bearer-token verification with protected-resource metadata and per-operation scopes; client OAuth and machine auth (client credentials, private-key JWT, cross-app access)\"\n    MCP Apps (UI): \"Not listed in the v2 docs index\"\n    Local testing: \"None built in; use MCP Inspector\"\n    Deploy story: \"Any JS runtime; you wire the HTTP framework\"\n    License: \"Apache-2.0 for v2 (repo is moving from MIT to Apache-2.0; v1 package MIT)\"\n  fastmcp:\n    Language and package: \"Python; PyPI fastmcp 4.1.3 (Python >=3.10). TypeScript counterpart: @prefecthq/fastmcp-ts\"\n    Defining a tool: \"@mcp.tool on a plain function; schema, validation and docs generated\"\n    Transports: \"stdio and HTTP; clients connect by URL with transport negotiation handled\"\n    Server auth: \"API keys up to full OAuth 2.1: token verification, remote OAuth (Descope, WorkOS, Auth0, SSO), OAuth and OIDC proxies, a full OAuth server, multiple auth sources, component-level authorization\"\n    MCP Apps (UI): \"Yes (Apps pillar: interactive UIs rendered in the conversation)\"\n    Local testing: \"FastMCP Client connects to any server, programmatically or from the CLI; docs cover AI-assisted development\"\n    Deploy story: \"HTTP deployment, fastmcp.json project config; Prefect Horizon (commercial gateway and hosting from the same team)\"\n    License: \"Apache-2.0\"\n  mcp-use:\n    Language and package: \"TypeScript first (npm mcp-use 2.11.2, Node >=22.22.2; scaffold with create-mcp-use-app) plus a Python package (PyPI mcp-use 1.7.1)\"\n    Defining a tool: \"server.tool({name, inputSchema, outputSchema, view}, handler) with Zod; typed structured results\"\n    Transports: \"Streamable HTTP servers; Redis-backed session storage for distributed deployments\"\n    Server auth: \"OAuth providers: Auth0, Better Auth, Clerk, Keycloak, Supabase, WorkOS, an OAuth proxy, or custom DCR\"\n    MCP Apps (UI): \"Yes: React Views bound to tools (ChatGPT apps, Claude connectors)\"\n    Local testing: \"Built-in Inspector at /mcp/inspector in dev, plus a hosted Inspector and headless CLI\"\n    Deploy story: \"Manufact Cloud (one-click), Google Cloud Run and other hosts\"\n    License: \"MIT\"\nverdict: \"Writing Python and want the reference implementation with few dependencies? Use the official SDK v2, which now has MCPServer, a client and MCP Apps. Need production auth (OAuth proxies, SSO, multiple token sources) in Python? FastMCP has the most auth options. In TypeScript, use the official v2 SDK when you want Standard Schema and your own HTTP framework. Pick mcp-use when you're building an MCP App with React views and want an inspector and deploy flow out of the box.\"\nsources:\n  - {title: \"MCP Python SDK README\", url: \"https://github.com/modelcontextprotocol/python-sdk\", accessed: 2026-10-26}\n  - {title: \"MCP Python SDK docs: MCP Apps\", url: \"https://py.sdk.modelcontextprotocol.io/advanced/apps/index.md\", accessed: 2026-10-26}\n  - {title: \"MCP Python SDK docs: Authorization\", url: \"https://py.sdk.modelcontextprotocol.io/run/authorization/index.md\", accessed: 2026-10-26}\n  - {title: \"PyPI: mcp\", url: \"https://pypi.org/project/mcp/\", accessed: 2026-10-26}\n  - {title: \"MCP TypeScript SDK README\", url: \"https://github.com/modelcontextprotocol/typescript-sdk\", accessed: 2026-10-26}\n  - {title: \"MCP TypeScript SDK v2 docs index\", url: \"https://ts.sdk.modelcontextprotocol.io/v2/llms.txt\", accessed: 2026-10-26}\n  - {title: \"npm: @modelcontextprotocol/server\", url: \"https://www.npmjs.com/package/@modelcontextprotocol/server\", accessed: 2026-10-26}\n  - {title: \"FastMCP README\", url: \"https://github.com/PrefectHQ/fastmcp\", accessed: 2026-10-26}\n  - {title: \"FastMCP docs index\", url: \"https://gofastmcp.com/llms.txt\", accessed: 2026-10-26}\n  - {title: \"PyPI: fastmcp\", url: \"https://pypi.org/project/fastmcp/\", accessed: 2026-10-26}\n  - {title: \"mcp-use README\", url: \"https://github.com/mcp-use/mcp-use\", accessed: 2026-10-26}\n  - {title: \"mcp-use docs index\", url: \"https://docs.mcp-use.com/llms.txt\", accessed: 2026-10-26}\n  - {title: \"npm: mcp-use\", url: \"https://www.npmjs.com/package/mcp-use\", accessed: 2026-10-26}\nlast_verified: 2026-10-26\npublished: 2026-10-26\n---\n\nEach of these four turns a function into an MCP tool. They differ in everything around that: auth, UI, testing and deployment. The official SDKs track the spec and keep dependencies light. FastMCP and mcp-use add batteries on top.\n\n## The official SDKs grew up\n\nBoth official SDKs shipped a v2 in 2026, and they look much more like the frameworks than v1 did:\n\n- The [Python SDK](https://indexagentica.com/entries/mcp-python-sdk/) v2 has an `MCPServer` class with decorator tools (`@mcp.tool()`), a `Client` that takes a URL, `mcp dev` to open the server in [MCP Inspector](https://indexagentica.com/entries/mcp-inspector/), and MCP Apps as a built-in extension. Server auth is deliberately minimal. Your server is an OAuth resource server, and you implement a `TokenVerifier`.\n- The [TypeScript SDK](https://indexagentica.com/entries/mcp-typescript-sdk/) v2 splits into `@modelcontextprotocol/server` and `@modelcontextprotocol/client`, implements the 2026-07-28 spec, and accepts any Standard Schema library (Zod v4, Valibot, ArkType). Thin middleware packages connect it to Node `http`, Express, Fastify or Hono. v1 (`@modelcontextprotocol/sdk`) still gets bug and security fixes for at least six months after the v2 release on 2026-07-27, so plan your migration.\n\nThere is also an official [Go SDK](https://indexagentica.com/entries/mcp-go-sdk/), maintained with Google, if Go is your server language.\n\n## When a framework earns its keep\n\n**Auth.** This is the biggest gap. [FastMCP](https://indexagentica.com/entries/fastmcp/) documents token verification, remote OAuth with external identity providers (Descope, WorkOS, Auth0, corporate SSO), OAuth and OIDC proxies for providers that don't support MCP's flow, a self-contained OAuth server, multiple auth sources and per-component authorization. [mcp-use](https://indexagentica.com/entries/mcp-use/) has ready-made providers for Auth0, Better Auth, Clerk, Keycloak, Supabase and WorkOS. With the official SDKs you put the authorization server together yourself. For the steps, see [Add OAuth to your MCP server](https://indexagentica.com/guides/add-oauth-to-your-mcp-server/).\n\n**UI (MCP Apps).** An MCP App is a tool plus a `ui://` HTML resource that the host renders in a sandboxed iframe. mcp-use is built around this, with React \"Views\" bound to tools and typed props. FastMCP has Apps as one of its three pillars, and the Python SDK ships an Apps extension. The TypeScript SDK's v2 docs index doesn't list it.\n\n**Testing.** mcp-use serves an Inspector at `/mcp/inspector` while you develop, and the Python SDK's `mcp dev` opens MCP Inspector. Every option can be tested with a scripted client, as in [Test your MCP server](https://indexagentica.com/guides/test-your-mcp-server/).\n\n**Deploying.** All four can run as a plain HTTP service. The two frameworks also sell hosting: Prefect Horizon from the FastMCP team (gateway, registry, SSO and RBAC) and Manufact Cloud from the mcp-use team. Both are optional. Once the server is up, [Publish an MCP server](https://indexagentica.com/guides/publish-an-mcp-server/) covers registries and listings. If you need a stdio server reachable over HTTP, or the other way round, see [Bridge stdio and remote MCP servers](https://indexagentica.com/guides/bridge-stdio-and-remote-mcp-servers/).\n\n## Adoption claims, with care\n\nFastMCP's README says FastMCP 1.0 was folded into the official Python SDK in 2024 and that \"some version of FastMCP powers 70% of MCP servers across all languages\". These are the project's own figures and were not checked here. mcp-use publishes MCP conformance badges for its Python server and client. Treat both as signals, not benchmarks.\n\n## A client to test against\n\nTo drive your server from an agent rather than an inspector, [fast-agent](https://indexagentica.com/entries/fast-agent/) connects to stdio or Streamable HTTP servers with `/connect`, supports sampling and elicitation, and includes transport diagnostics. That makes it handy for checking that a new server works end to end.\n",
  "html": "<p>Each of these four turns a function into an MCP tool. They differ in everything around that: auth, UI, testing and deployment. The official SDKs track the spec and keep dependencies light. FastMCP and mcp-use add batteries on top.</p>\n<h2>The official SDKs grew up</h2>\n<p>Both official SDKs shipped a v2 in 2026, and they look much more like the frameworks than v1 did:</p>\n<ul><li>The <a href=\"/entries/mcp-python-sdk/\">Python SDK</a> v2 has an <code>MCPServer</code> class with decorator tools (<code>@mcp.tool()</code>), a <code>Client</code> that takes a URL, <code>mcp dev</code> to open the server in <a href=\"/entries/mcp-inspector/\">MCP Inspector</a>, and MCP Apps as a built-in extension. Server auth is deliberately minimal. Your server is an OAuth resource server, and you implement a <code>TokenVerifier</code>.</li><li>The <a href=\"/entries/mcp-typescript-sdk/\">TypeScript SDK</a> v2 splits into <code>@modelcontextprotocol/server</code> and <code>@modelcontextprotocol/client</code>, implements the 2026-07-28 spec, and accepts any Standard Schema library (Zod v4, Valibot, ArkType). Thin middleware packages connect it to Node <code>http</code>, Express, Fastify or Hono. v1 (<code>@modelcontextprotocol/sdk</code>) still gets bug and security fixes for at least six months after the v2 release on 2026-07-27, so plan your migration.</li></ul>\n<p>There is also an official <a href=\"/entries/mcp-go-sdk/\">Go SDK</a>, maintained with Google, if Go is your server language.</p>\n<h2>When a framework earns its keep</h2>\n<p><strong>Auth.</strong> This is the biggest gap. <a href=\"/entries/fastmcp/\">FastMCP</a> documents token verification, remote OAuth with external identity providers (Descope, WorkOS, Auth0, corporate SSO), OAuth and OIDC proxies for providers that don&#39;t support MCP&#39;s flow, a self-contained OAuth server, multiple auth sources and per-component authorization. <a href=\"/entries/mcp-use/\">mcp-use</a> has ready-made providers for Auth0, Better Auth, Clerk, Keycloak, Supabase and WorkOS. With the official SDKs you put the authorization server together yourself. For the steps, see <a href=\"/guides/add-oauth-to-your-mcp-server/\">Add OAuth to your MCP server</a>.</p>\n<p><strong>UI (MCP Apps).</strong> An MCP App is a tool plus a <code>ui://</code> HTML resource that the host renders in a sandboxed iframe. mcp-use is built around this, with React &quot;Views&quot; bound to tools and typed props. FastMCP has Apps as one of its three pillars, and the Python SDK ships an Apps extension. The TypeScript SDK&#39;s v2 docs index doesn&#39;t list it.</p>\n<p><strong>Testing.</strong> mcp-use serves an Inspector at <code>/mcp/inspector</code> while you develop, and the Python SDK&#39;s <code>mcp dev</code> opens MCP Inspector. Every option can be tested with a scripted client, as in <a href=\"/guides/test-your-mcp-server/\">Test your MCP server</a>.</p>\n<p><strong>Deploying.</strong> All four can run as a plain HTTP service. The two frameworks also sell hosting: Prefect Horizon from the FastMCP team (gateway, registry, SSO and RBAC) and Manufact Cloud from the mcp-use team. Both are optional. Once the server is up, <a href=\"/guides/publish-an-mcp-server/\">Publish an MCP server</a> covers registries and listings. If you need a stdio server reachable over HTTP, or the other way round, see <a href=\"/guides/bridge-stdio-and-remote-mcp-servers/\">Bridge stdio and remote MCP servers</a>.</p>\n<h2>Adoption claims, with care</h2>\n<p>FastMCP&#39;s README says FastMCP 1.0 was folded into the official Python SDK in 2024 and that &quot;some version of FastMCP powers 70% of MCP servers across all languages&quot;. These are the project&#39;s own figures and were not checked here. mcp-use publishes MCP conformance badges for its Python server and client. Treat both as signals, not benchmarks.</p>\n<h2>A client to test against</h2>\n<p>To drive your server from an agent rather than an inspector, <a href=\"/entries/fast-agent/\">fast-agent</a> connects to stdio or Streamable HTTP servers with <code>/connect</code>, supports sampling and elicitation, and includes transport diagnostics. That makes it handy for checking that a new server works end to end.</p>"
}
