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
| Language | Tier | High-level helper |
|---|---|---|
| TypeScript | 1 (reference) | @modelcontextprotocol/sdk |
| Python | 1 | FastMCP |
| Kotlin | 1 | io.modelcontextprotocol:kotlin-sdk |
| Go | 1 | github.com/modelcontextprotocol/go-sdk |
| Ruby | 2 | mcp gem |
| C# / .NET | 2 | ModelContextProtocol 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