registry/data/seed.json
adam jones 66993e9121
Add icon support to server.json schema (#620)
Implements icon support based on the Model Context Protocol
specification, allowing servers to specify display icons with optional
size, MIME type, and theme variants.

## Changes

- Add `Icon` type to `pkg/model/types.go` with struct tags for automatic
API validation
- Add `icons` field to `ServerJSON` in `pkg/api/v0/types.go`
- Add icon validation in `internal/validators/validators.go`:
  - Only HTTPS URLs allowed (no HTTP or data URIs)
  - Maximum URL length of 255 characters
  - Validates absolute URLs with proper scheme
- Update JSON schema and OpenAPI documentation with Icon definitions
- Add comprehensive test cases for icon validation
- Add example icon to seed.json (Airtable server)
- Change `websiteUrl` validation to HTTPS-only for consistency

## Implementation Details

The implementation uses a two-layer validation architecture:

1. **Huma framework** validates struct tags (`required`, `maxLength`,
`enum`, `pattern`) and returns 422 for violations
2. **Custom validators** handle business logic (HTTPS scheme
requirement, absolute URL requirement) and return 400 for violations

This approach leverages Huma's automatic validation while keeping
business-specific rules in the validator layer.

## Icon Field Specification

- `src` (required): HTTPS URL to icon resource, max 255 characters
- `mimeType` (optional): One of `image/png`, `image/jpeg`, `image/jpg`,
`image/svg+xml`, `image/webp`
- `sizes` (optional): Array of size strings in "WxH" format or "any" for
scalable formats
- `theme` (optional): Either "light" or "dark" to indicate intended
background

Multiple icons can be provided (e.g., for different themes or sizes).
2025-10-07 13:30:32 +01:00

161 lines
5.3 KiB
JSON

[
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json",
"name": "io.github.domdomegg/airtable-mcp-server",
"description": "Read and write access to Airtable database schemas, tables, and records.",
"repository": {
"url": "https://github.com/domdomegg/airtable-mcp-server.git",
"source": "github"
},
"version": "1.7.2",
"icons": [
{
"src": "https://airtable.com/images/favicon/favicon-32x32.png",
"mimeType": "image/png",
"sizes": ["32x32"]
}
],
"packages": [
{
"registryType": "npm",
"identifier": "airtable-mcp-server",
"version": "1.7.2",
"runtimeHint": "npx",
"transport": {
"type": "stdio"
},
"environmentVariables": [
{
"description": "Airtable personal access token (e.g., pat123.abc123). Create at https://airtable.com/create/tokens/new with scopes: schema.bases:read, data.records:read, and optionally schema.bases:write and data.records:write.",
"isRequired": true,
"isSecret": true,
"name": "AIRTABLE_API_KEY"
}
]
},
{
"registryType": "oci",
"identifier": "domdomegg/airtable-mcp-server",
"version": "1.7.2",
"runtimeHint": "docker",
"transport": {
"type": "stdio"
},
"environmentVariables": [
{
"description": "Airtable personal access token (e.g., pat123.abc123). Create at https://airtable.com/create/tokens/new with scopes: schema.bases:read, data.records:read, and optionally schema.bases:write and data.records:write.",
"isRequired": true,
"isSecret": true,
"name": "AIRTABLE_API_KEY"
}
]
},
{
"registryType": "mcpb",
"identifier": "https://github.com/domdomegg/airtable-mcp-server/releases/download/v1.7.2/airtable-mcp-server.mcpb",
"version": "1.7.2",
"fileSha256": "8220de07a08ebe908f04da139ea03dbfe29758141347e945da60535fb7bcca20",
"transport": {
"type": "stdio"
}
}
]
},
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json",
"name": "io.github.domdomegg/airtable-mcp-server",
"description": "Read and write access to Airtable database schemas, tables, and records.",
"repository": {
"url": "https://github.com/domdomegg/airtable-mcp-server.git",
"source": "github"
},
"version": "1.7.3",
"packages": [
{
"registryType": "npm",
"identifier": "airtable-mcp-server",
"version": "1.7.3",
"runtimeHint": "npx",
"transport": {
"type": "stdio"
},
"environmentVariables": [
{
"description": "Airtable personal access token (e.g., pat123.abc123). Create at https://airtable.com/create/tokens/new with scopes: schema.bases:read, data.records:read, and optionally schema.bases:write and data.records:write.",
"isRequired": true,
"isSecret": true,
"name": "AIRTABLE_API_KEY"
}
]
},
{
"registryType": "oci",
"identifier": "domdomegg/airtable-mcp-server",
"version": "1.7.3",
"runtimeHint": "docker",
"transport": {
"type": "stdio"
},
"environmentVariables": [
{
"description": "Airtable personal access token (e.g., pat123.abc123). Create at https://airtable.com/create/tokens/new with scopes: schema.bases:read, data.records:read, and optionally schema.bases:write and data.records:write.",
"isRequired": true,
"isSecret": true,
"name": "AIRTABLE_API_KEY"
}
]
},
{
"registryType": "mcpb",
"identifier": "https://github.com/domdomegg/airtable-mcp-server/releases/download/v1.7.3/airtable-mcp-server.mcpb",
"version": "1.7.3",
"fileSha256": "0f28a9129cfebd262dfb77854c872355d21401bb3e056575b3027081f5d570ca",
"transport": {
"type": "stdio"
}
}
]
},
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json",
"name": "io.github.domdomegg/time-mcp-nuget",
"description": "Get the current UTC time in RFC 3339 format.",
"repository": {
"url": "https://github.com/domdomegg/time-mcp-nuget.git",
"source": "github"
},
"version": "1.0.8",
"packages": [
{
"registryType": "nuget",
"identifier": "TimeMcpServer",
"version": "1.0.8",
"runtimeHint": "dnx",
"transport": {
"type": "stdio"
}
}
]
},
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json",
"name": "io.github.domdomegg/time-mcp-pypi",
"description": "Get the current UTC time in RFC 3339 format.",
"repository": {
"url": "https://github.com/domdomegg/time-mcp-pypi.git",
"source": "github"
},
"version": "1.0.6",
"packages": [
{
"registryType": "pypi",
"identifier": "time-mcp-pypi",
"version": "1.0.6",
"runtimeHint": "python",
"transport": {
"type": "stdio"
}
}
]
}
]