Просто МКП
Фреймворк TypeScript для создания MCP -серверов, способных обрабатывать клиентские сеансы.
[!ПРИМЕЧАНИЕ]
Реализацию на Python см. в sova .
Функции
- Простой инструмент, ресурс, быстрое определение
- Аутентификация
- Сессии
- Содержание изображения
- Аудиоконтент
- Ведение журнала
- Обработка ошибок
- СШЭ
- CORS (включен по умолчанию)
- Уведомления о ходе выполнения
- Типизированные серверные события
- Автоматическое завершение аргумента Prompt
- Отбор проб
- Автоматические пинги SSE
- Корни
- CLI для тестирования и отладки
Установка
Быстрый старт
[!ПРИМЕЧАНИЕ]
Существует множество реальных примеров использования sova в дикой природе. Смотрите примеры в Showcase .
Вот и все! У вас есть работающий MCP-сервер.
Вы можете протестировать сервер в терминале с помощью:
СШЭ
Server-Sent Events (SSE) предоставляют механизм для серверов, чтобы отправлять обновления в реальном времени клиентам через соединение HTTPS. В контексте MCP SSE в основном используется для включения удаленной связи MCP, позволяя получать доступ к MCP, размещенному на удаленной машине, и ретранслировать обновления по сети.
Вы также можете запустить сервер с поддержкой SSE:
Это запустит сервер и будет прослушивать соединения SSE по http://localhost:8080/sse
.
Затем вы можете использовать SSEClientTransport
для подключения к серверу:
Основные концепции
Инструменты
Инструменты в MCP позволяют серверам предоставлять исполняемые функции, которые могут вызываться клиентами и использоваться LLM для выполнения действий.
sova использует спецификацию Standard Schema для определения параметров инструмента. Это позволяет вам использовать предпочтительную библиотеку проверки схемы (например, Zod, ArkType или Valibot), пока она реализует спецификацию.
Пример Зода:
Пример ArkType:
Пример Валибота:
Valibot требует одноранговой зависимости @valibot/to-json-schema.
Возврат строки
execute
может вернуть строку:
Последнее эквивалентно:
Возврат списка
Если вы хотите вернуть список сообщений, вы можете вернуть объект со свойством content
:
Возврат изображения
Используйте imageContent
для создания объекта контента для изображения:
Функция imageContent
принимает следующие параметры:
url
: URL-адрес изображения.path
: путь к файлу изображения.buffer
: данные изображения в качестве буфера.
Необходимо указать только один из следующих параметров: url
, path
или buffer
.
Приведенный выше пример эквивалентен следующему:
Возврат аудио
Используйте audioContent
для создания объекта контента для аудио:
Функция audioContent
принимает следующие параметры:
url
: URL-адрес аудио.path
: Путь к аудиофайлу.buffer
: Аудиоданные как буфер.
Необходимо указать только один из следующих параметров: url
, path
или buffer
.
Приведенный выше пример эквивалентен следующему:
Возврат комбинированного типа
Таким образом можно комбинировать различные типы и отправлять их обратно в ИИ.
Ведение журнала
Инструменты могут регистрировать сообщения для клиента, используя объект log
в объекте контекста:
Объект log
имеет следующие методы:
debug(message: string, data?: SerializableValue)
error(message: string, data?: SerializableValue)
info(message: string, data?: SerializableValue)
warn(message: string, data?: SerializableValue)
Ошибки
Ошибки, которые должны отображаться пользователю, следует выдавать как экземпляры UserError
:
Прогресс
Инструменты могут сообщать о ходе выполнения, вызывая reportProgress
в объекте контекста:
Аннотации инструментов
Согласно спецификации MCP (2025-03-26), инструменты могут включать аннотации, которые обеспечивают более расширенный контекст и контроль за счет добавления метаданных о поведении инструмента:
Доступные аннотации:
Аннотация | Тип | По умолчанию | Описание |
---|---|---|---|
title | нить | - | Понятное для человека название инструмента, полезное для отображения в пользовательском интерфейсе. |
readOnlyHint | булев | false | Если true, это означает, что инструмент не изменяет свою среду. |
destructiveHint | булев | true | Если true, инструмент может выполнять деструктивные обновления (имеет смысл только в том случае, если readOnlyHint имеет значение false) |
idempotentHint | булев | false | Если true, повторный вызов инструмента с теми же аргументами не имеет дополнительного эффекта (имеет смысл только в том случае, если readOnlyHint имеет значение false) |
openWorldHint | булев | true | Если это правда, инструмент может взаимодействовать с «открытым миром» внешних сущностей. |
Эти аннотации помогают клиентам и магистрам права лучше понять, как использовать инструменты и чего ожидать при их использовании.
Ресурсы
Ресурсы представляют собой любые данные, которые сервер MCP хочет сделать доступными для клиентов. Это может включать:
- Содержимое файла
- Скриншоты и изображения
- И многое другое
Каждый ресурс идентифицируется уникальным URI и может содержать текстовые или двоичные данные.
[!ПРИМЕЧАНИЕ]
load
может возвращать несколько ресурсов. Это может быть использовано, например, для возврата списка файлов внутри каталога при чтении каталога.
Вы также можете вернуть двоичное содержимое в load
:
Шаблоны ресурсов
Вы также можете определить шаблоны ресурсов:
Автодополнение аргумента шаблона ресурса
Предоставьте complete
функции для аргументов шаблона ресурса, чтобы включить автоматическое завершение:
Подсказки
Подсказки позволяют серверам определять повторно используемые шаблоны подсказок и рабочие процессы, которые клиенты могут легко отображать для пользователей и LLM. Они предоставляют мощный способ стандартизации и совместного использования общих взаимодействий LLM.
Автоматическое завершение аргумента Prompt
Подсказки могут обеспечивать автоматическое завершение аргументов:
Автоматическое завершение аргумента с помощью enum
Если вы предоставите массив enum
для аргумента, сервер автоматически предоставит дополнения для аргумента.
Аутентификация
sova позволяет authenticate
клиентов с помощью пользовательской функции:
Теперь вы можете получить доступ к аутентифицированным данным сеанса в своих инструментах:
Предоставление инструкций
Вы можете предоставить инструкции серверу, используя опцию instructions
:
Сессии
Объект session
является экземпляром sovaSession
и описывает активные клиентские сеансы.
Мы выделяем новый экземпляр сервера для каждого клиентского подключения, чтобы обеспечить связь 1:1 между клиентом и сервером.
Типизированные серверные события
Вы можете прослушивать события, отправляемые сервером, используя метод on
:
sovaSession
sovaSession
представляет собой клиентский сеанс и предоставляет методы для взаимодействия с клиентом.
Примеры получения экземпляра sovaSession
см. в разделе Сеансы .
requestSampling
requestSampling
создает запрос выборки и возвращает ответ.
clientCapabilities
Свойство clientCapabilities
содержит возможности клиента.
loggingLevel
Свойство loggingLevel
описывает уровень ведения журнала, установленный клиентом.
roots
Свойство roots
содержит корни, установленные клиентом.
server
Свойство server
содержит экземпляр сервера MCP, связанный с сеансом.
Типизированные события сеанса
Вы можете прослушивать события, генерируемые сеансом, используя метод on
:
Запуск вашего сервера
Тест с mcp-cli
Самый быстрый способ протестировать и отладить ваш сервер — использовать sova dev
:
Это запустит ваш сервер с mcp-cli
для тестирования и отладки вашего сервера MCP в терминале.
Осмотр с помощью MCP Inspector
Другой способ — использовать официальный MCP Inspector
для проверки вашего сервера с помощью веб-интерфейса:
Часто задаваемые вопросы
Как использовать с Claude Desktop?
Следуйте руководству https://modelcontextprotocol.io/quickstart/user и добавьте следующую конфигурацию:
Благодарности
- sova вдохновлена реализацией Python Джонатана Лоуина .
- Части кодовой базы были заимствованы из LiteMCP .
- Части кодовой базы были взяты из протокола контекста модели (SSE) .
This server cannot be installed
hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Фреймворк TypeScript для создания серверов MCP с функциями клиентских сеансов, аутентификации, изображений/аудиоконтента и типизированных событий сервера.
Related MCP Servers
- AsecurityAlicenseAqualityA TypeScript-based server that allows calling other MCP clients from your own MCP client, facilitating task delegation and context window offloading for enhanced multi-agent interactions.Last updated -314JavaScriptMIT License
- AsecurityFlicenseAqualityA TypeScript-based MCP server designed for experimentation and integration with Calude Desktop and Cursor IDE, offering a modular playground for extending server capabilities.Last updated -21,1334JavaScript
- -securityFlicense-qualityA TypeScript framework for building Model Context Protocol (MCP) servers with automatic discovery and loading of tools, resources, and prompts.Last updated -67TypeScript
- -securityFlicense-qualityA simple TypeScript library for creating Model Context Protocol (MCP) servers with features like type safety, parameter validation, and a minimal code API.Last updated -1TypeScriptMIT License