Все самое полезное для C#-разработчика в одном канале.
Наши курсы: https://clc.to/y3LDtw
По рекламе: @tproger_sales_bot
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Post #6963
2.84K
💡 MCP-сервера на F# без лишнего кода
MCP (Model Context Protocol) набирает популярность как способ подключать инструменты к языковым моделям. Но писать MCP-серверы на C# многословно, а на чистом .NET SDK — тем более. FsMcp решает эту задачу для F#-разработчиков: типобезопасный DSL, минимум шаблонного кода, интеграция с экосистемой .NET.
Что это такое
Установка через NuGet:
Дополнительные пакеты по необходимости:
Как это работает
Сервер описывается через
Инструмент принимает F#-запись как входные данные, JSON Schema генерируется автоматически через TypeShape:
Поле
Пример с калькулятором:
Ошибки возвращаются через
HTTP-транспорт
Если нужен не stdio, а HTTP/SSE:
Тестирование
Что ещё есть в библиотеке
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_view
MCP (Model Context Protocol) набирает популярность как способ подключать инструменты к языковым моделям. Но писать MCP-серверы на C# многословно, а на чистом .NET SDK — тем более. FsMcp решает эту задачу для F#-разработчиков: типобезопасный DSL, минимум шаблонного кода, интеграция с экосистемой .NET.
Что это такое
FsMcp это обёртка над официальным [Microsoft ModelContextProtocol .NET SDK](https://github.com/modelcontextprotocol/csharp-sdk). Библиотека добавляет поверх него computation expressions, типизированные обработчики инструментов и Result-based обработку ошибок.Установка через NuGet:
dotnet add package FsMcp.Server
Дополнительные пакеты по необходимости:
dotnet add package FsMcp.Client # клиент
dotnet add package FsMcp.Testing # тест-хелперы
dotnet add package FsMcp.Server.Http # HTTP/SSE транспорт
dotnet add package FsMcp.Sampling # вызов LLM из инструментов
Как это работает
Сервер описывается через
mcpServer { } — computation expression, внутри которого объявляются инструменты, ресурсы и промпты.Инструмент принимает F#-запись как входные данные, JSON Schema генерируется автоматически через TypeShape:
type GreetArgs = { name: string; greeting: string option }
let server = mcpServer {
name "MyServer"
version "1.0.0"
tool (TypedTool.define<GreetArgs> "greet" "Greets a person" (fun args -> task {
let greeting = args.greeting |> Option.defaultValue "Hello"
return Ok [ Content.text $"{greeting}, {args.name}!" ]
}) |> unwrapResult)
useStdio
}
Server.run server |> fun t -> t.GetAwaiter().GetResult()Поле
greeting помечается как необязательное автоматически, потому что тип string option.Пример с калькулятором:
type CalcArgs = { a: float; b: float }
let server = mcpServer {
name "Calculator"
version "1.0.0"
tool (TypedTool.define<CalcArgs> "add" "Add two numbers" (fun args -> task {
return Ok [ Content.text $"{args.a + args.b}" ]
}) |> unwrapResult)
tool (TypedTool.define<CalcArgs> "divide" "Divide a by b" (fun args -> task {
if args.b = 0.0 then return Error (TransportError "Division by zero")
else return Ok [ Content.text $"{args.a / args.b}" ]
}) |> unwrapResult)
useStdio
}Ошибки возвращаются через
Result<'T, McpError> без исключений на ожидаемых путях.HTTP-транспорт
Если нужен не stdio, а HTTP/SSE:
open FsMcp.Server.Http
HttpServer.run server (Some "/mcp") "http://localhost:3001"
|> fun t -> t.GetAwaiter().GetResult()
Тестирование
FsMcp.Testing позволяет вызывать инструменты напрямую, без сетевого соединения и запуска процессов:open FsMcp.Testing
let result =
TestServer.callTool serverConfig "add"
(Map.ofList ["a", jsonEl 10; "b", jsonEl 20])
|> Async.AwaitTask |> Async.RunSynchronously
result |> Expect.mcpHasTextContent "30" "addition works"
Что ещё есть в библиотеке
FsMcp покрывает не только базовый сценарий. Среди возможностей: стриминговые инструменты через IAsyncEnumerable<Content>, уведомления о прогрессе, валидационный middleware, трассировка через OpenTelemetry, горячая замена инструментов (DynamicServer.addTool) и интеграция с FsToolkit.ErrorHandling через пакет FsMcp.TaskApi.📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_view
- ❤ 3
- 🤩 3
- 👍 1
- 🤔 1








