All notable changes to FsMcp are documented here. Format follows Keep a Changelog.
FsMcp.Core
- Domain types:
Content,ResourceContents,McpRole,McpMessage,McpError - Identifier types with smart constructors:
ToolName,ResourceUri,PromptName,MimeType,ServerName,ServerVersion ValidationErrorDU for structured error reporting- JSON serialization with custom converters for DUs (MCP wire format)
- Internal
Interopmodule for F# <-> C# SDK type conversion
FsMcp.Server
mcpServer { }computation expression for declarative server definitionTool.define,Resource.define,Prompt.defineconvenience functionsTypedTool.define<'T>with TypeShape-powered JSON Schema generation and cachingmcpTool { }nested CE for cleaner tool definitionsStreamingTool.defineforIAsyncEnumerable<Content>handlersContextualTool.define<'T>with notification support (progress + logging)Middleware.composeandMiddleware.pipelinefor composable middlewareValidationMiddleware— auto-validates tool args against JSON SchemaTelemetry.tracing()— Activity-based spans (OpenTelemetry compatible)Telemetry.MetricsCollector— request counts and durationsDynamicServer— add/remove tools at runtime with change eventsServer.run(stdio) andServer.runHttp(HTTP/SSE via ASP.NET Core)
FsMcp.Client
- Typed client:
McpClient.connect,callTool,listTools,readResource,getPrompt,disconnect ClientTransport.stdio,http,httpWithHeadersMcpClientAsyncmodule withAsync<'T>wrappers
FsMcp.Testing
TestServer.callTool/readResource/getPrompt— direct handler invocationExpect.mcpHasTextContent,mcpIsError,mcpIsSuccess,mcpHasContentCountMcpArbitraries— FsCheck generators for all domain types
FsMcp.TaskApi
ClientPipelinewithtaskResult { }CE via FsToolkit.ErrorHandling- Pipe-friendly:
client |> ClientPipeline.callToolText "name" args
FsMcp.Sampling
SamplingRequestbuilders:simple,withSystem,withTemperature,withModelSamplingTool.define<'T>— tools that invoke client LLMmockSampleandnoOpSamplefor testing
Examples
- EchoServer — echo + reverse tools, resource, prompt
- Calculator — add/subtract/multiply/divide
- FileServer — read_file, list_directory, file_info
Infrastructure
- 308 Expecto + FsCheck tests across 6 projects
- NuGet packaging for all 6 libraries
- README with architecture diagrams