Skip to main content

FsMcp

Typed cancellable MCP servers and secure clients in idiomatic F#

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

Strict validation, cancellable typed and streaming handlers, bounded resource subscriptions, HTTP/DI composition, and testing utilities.

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 cancellationToken -> task {
            cancellationToken.ThrowIfCancellationRequested()
            let g = args.greeting |> Option.defaultValue "Hello"
            return Ok [ Content.text $"{g}, {args.name}!" ]
        }) |> unwrapResult)
}

Server.run server

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

Install

dotnet add package FsMcp.Server

Full install guide →