DS DevShelfHub Projects · AI tools
Tutorials / MCP / SDKs
MCP Intermediate · 8 min read Page 20 of 23

MCP SDKs — Python, TypeScript, Kotlin, Go, Ruby, C#

By DevShelfHub

Six official SDKs maintained against a shared TypeScript-schema source of truth. They differ in idiom but expose the same protocol surface.

Series progress20 / 23
MCP SDKs tutorial — Python, TypeScript, Kotlin, Go, Ruby, and C# official SDK comparison

The SDK tiering system (SEP-1730)

Tier 1 — Official

Full spec coverage, stable releases, comprehensive tests, core maintainers.

Tier 2 — Community

Substantial coverage, active maintenance, community-maintained.

Tier 3 — Experimental

Partial coverage, no stability guarantees, niche use cases.

SDKs at a glance

LanguageTierHigh-level helper
TypeScript1 (reference)@modelcontextprotocol/sdk
Python1FastMCP
Kotlin1io.modelcontextprotocol:kotlin-sdk
Go1github.com/modelcontextprotocol/go-sdk
Ruby2mcp gem
C# / .NET2ModelContextProtocol NuGet

Same server, four languages

Python (FastMCP)

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("weather")

@mcp.tool()
async def get_forecast(lat: float, lng: float) -> str:
    return f"Sunny at ({lat}, {lng})"

if __name__ == "__main__":
    mcp.run()

TypeScript

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

const server = new McpServer({ name: "weather", version: "1.0.0" });

server.tool(
  "get_forecast",
  { lat: z.number(), lng: z.number() },
  async ({ lat, lng }) => ({ content: [{ type: "text", text: `Sunny at (${lat}, ${lng})` }] })
);

await server.connect(new StdioServerTransport());

Ruby

require "mcp"

server = MCP::Server.new(name: "weather", version: "1.0.0")
server.tool(name: "get_forecast", input_schema: { type: "object", properties: { lat: { type: "number" }, lng: { type: "number" } } }) do |args|
  { content: [{ type: "text", text: "Sunny at (#{args[:lat]}, #{args[:lng]})" }] }
end
server.run_stdio

C# / .NET

[McpServerToolType]
public class WeatherTools {
    [McpServerTool, Description("Get forecast for a location.")]
    public static string GetForecast(double lat, double lng) => $"Sunny at ({lat}, {lng})";
}

Choosing an SDK

  • Already a Python shop? FastMCP wraps the protocol in decorators — fastest path to a server.
  • Need browser/Node deployment? TypeScript SDK is the reference implementation.
  • JVM ecosystem? Kotlin SDK with Spring Boot starter.
  • Static binary, single-file deploy? Go SDK.
  • Internal Rails app? Ruby gem (tier 2).
  • Existing .NET / Azure setup? ModelContextProtocol NuGet (tier 2).

Quick summary

  • Six official SDKs; four in Tier 1, two in Tier 2
  • TypeScript SDK is the reference — others mirror its surface
  • All map to the same JSON-RPC wire protocol
  • Pick by ecosystem fit; the protocol is identical

MCP SDKs FAQ

What official MCP SDKs are available?

Anthropic maintains six official MCP SDKs: Python (mcp), TypeScript (@modelcontextprotocol/sdk), Kotlin (kotlin-sdk), Go (go-sdk), Ruby (ruby-sdk), and C# (csharp-sdk). The TypeScript SDK is the reference implementation.

Which MCP SDK should I use for Python?

Install mcp via pip or uv. Use the FastMCP class for high-level server development — it handles all protocol boilerplate. For low-level control, use the Server class directly from the mcp.server module.

Do all MCP SDKs have feature parity?

Not all SDKs implement every feature simultaneously. The TypeScript and Python SDKs are Tier 1 (full feature support). Kotlin, Go, Ruby, and C# are Tier 2 (core features, may lag on newer additions). Check the SDK's changelog before using experimental features.

How are MCP SDKs versioned?

MCP SDKs use semantic versioning tied to the MCP protocol version they implement. When the MCP spec introduces breaking changes, SDKs release a new major version. All official SDKs are generated from a shared TypeScript schema source of truth.

Can I build an MCP server without an official SDK?

Yes. MCP is a JSON-RPC 2.0 protocol with a well-defined spec. You can implement it from scratch in any language that supports JSON and stdio or HTTP. The official SDKs just save time by handling the protocol layer for you.

Quick jump:API Reference