Skip to main content

FsMcp

Build MCP servers in F# with type safety and zero boilerplate

Get StartedGitHub

Type-Safe by Default

Smart constructors, discriminated unions, and Result types. No obj in the public API. Invalid states are unrepresentable.

Computation Expressions

mcpServer { } CE for declarative server definition. TypedTool.define<'T> auto-generates JSON Schema from F# records via TypeShape.

Batteries Included

Middleware pipeline, telemetry, validation, streaming, notifications, hot reload, and testing utilities — all composable.

Define an MCP server in 10 lines

type GreetArgs = { name: string; greeting: string option }

let server = mcpServer {
    name "MyServer"
    version "1.0.0"
    tool (TypedTool.define<GreetArgs> "greet" "Greets"
        (fun args -> task {
            let g = args.greeting |> Option.defaultValue "Hello"
            return Ok [ Content.text $"{g}, {args.name}!" ]
        }) |> unwrapResult)
    useStdio
}

Server.run server

JSON Schema auto-generated from GreetArgs. name=required, greeting=optional.

Install

dotnet add package FsMcp.Server

Full install guide →