No description
- Go 95%
- Dockerfile 5%
| handlers | ||
| http | ||
| middleware | ||
| models | ||
| storage | ||
| .dockerignore | ||
| .gitignore | ||
| .woodpecker.yml | ||
| Dockerfile | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| main.go | ||
| README.md | ||
MCP Registry Server
Сервер реестра MCP (Model Context Protocol), реализующий спецификацию MCP Server Registry API для хранения и управления метаданными MCP-серверов.
Особенности
- ✅ Полная поддержка MCP Server Registry API specification
- ✅ Хранение данных в файловой системе с структурированной организацией
- ✅ Аутентификация Bearer Token для операций публикации/удаления
- ✅ Пагинация и фильтрация списка серверов
- ✅ Поддержка версионирования MCP-серверов
- ✅ Валидация JSON схемы MCP-серверов
Быстрый старт
Требования
- Go 1.25 или выше
- Переменные окружения (опционально)
Установка
git clone https://git.ymnuktech.ru/ymnuk/mcp-registry.git
cd mcp-registry
go mod tidy
go build -o mcp-registry .
Запуск
# Базовый запуск
./mcp-registry
# С настройкой переменных окружения
DATA_DIR="./data" \
PORT="8080" \
REGISTRY_AUTH_TOKEN="your-secret-token" \
./mcp-registry
Docker
docker build -t gti.ymnuktech.ru/ymnuk/mcp-registry .
docker run -p 8080:8080 \
-e DATA_DIR=/data \
-e REGISTRY_AUTH_TOKEN="your-secret-token" \
-v $(pwd)/data:/data \
mcp-registry
Конфигурация
Переменные окружения
| Переменная | По умолчанию | Описание |
|---|---|---|
DATA_DIR |
./data |
Директория для хранения данных MCP-серверов |
PORT |
8080 |
Порт HTTP сервера |
REGISTRY_AUTH_TOKEN |
- | Токен для аутентификации операций публикации/удаления |
Структура хранения данных
Сервер хранит данные в следующей структуре:
data/
├── com.example%2Fweather/
│ ├── 1.0.0/
│ │ └── server.json
│ └── 1.1.0/
│ └── server.json
└── io.modelcontextprotocol%2Ffilesystem/
└── 2.0.0/
└── server.json
API Endpoints
Получение серверов
# Список всех серверов
curl http://localhost:8080/v0/servers
# Поиск серверов
curl "http://localhost:8080/v0/servers?search=weather"
# Пагинация
curl "http://localhost:8080/v0/servers?limit=10&cursor=next-page-token"
# Список версий конкретного сервера
curl http://localhost:8080/v0/servers/com.example%2Fweather/versions
# Получение конкретной версии
curl http://localhost:8080/v0/servers/com.example%2Fweather/versions/1.0.0
# Получение последней версии
curl http://localhost:8080/v0/servers/com.example%2Fweather/versions/latest
Публикация серверов
curl -X POST http://localhost:8080/v0/publish \
-H "Authorization: Bearer your-secret-token" \
-H "Content-Type: application/json" \
-d '{
"name": "com.example/weather",
"description": "Weather data MCP server",
"version": "1.0.0",
"title": "Weather API",
"repository": {
"url": "https://github.com/example/weather-server",
"source": "github"
},
"packages": [
{
"registryType": "npm",
"identifier": "@example/weather-server",
"version": "1.0.0",
"transport": {
"type": "stdio"
}
}
]
}'
Удаление версий
curl -X DELETE http://localhost:8080/v0/servers/com.example%2Fweather/versions/1.0.0 \
-H "Authorization: Bearer your-secret-token"
Пример MCP-сервера
{
"name": "com.example/weather",
"description": "MCP server providing weather data and forecasts",
"title": "Weather API",
"version": "1.0.0",
"repository": {
"url": "https://github.com/example/weather-server",
"source": "github",
"id": "123456789"
},
"websiteUrl": "https://example.com/weather-server",
"packages": [
{
"registryType": "npm",
"registryBaseUrl": "https://registry.npmjs.org",
"identifier": "@example/weather-server",
"version": "1.0.0",
"transport": {
"type": "stdio"
}
}
],
"icons": [
{
"src": "https://example.com/icon.png",
"mimeType": "image/png",
"sizes": ["48x48", "96x96"]
}
],
"_meta": {
"io.modelcontextprotocol.registry/publisher-provided": {
"tool": "publisher-cli",
"version": "1.0.0",
"buildInfo": {
"commit": "abc123def456",
"timestamp": "2024-01-15T10:30:00Z"
}
}
}
}
Лицензия
Этот проект распространяется под лицензией MIT. Подробнее см. в файле LICENSE.