Relin
Inspect webhook health, investigate delivery failures, configure sources, and replay events.
사용해야 할까요
품질 및 안전성
발견 사항 (13)
- LOWrevoke_api_key에서
- LOWrotate_source_token에서
- LOWupsert_recipient에서
- LOWrotate_endpoint_secret에서
- LOWupsert_event_type에서
- LOWdelete_event_type에서
- LOWsave_portal_settings에서
- LOWcreate_portal_host에서
- LOWget_slack_connect_url에서
- LOWretry_failed_deliveries에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"relin": {
"url": "https://relin.app/mcp"
}
}
}원격 엔드포인트
https://relin.app/mcpstreamable-http할 수 있는 일
도구 목록
도구 (52)
🟢describe_relin
Explain what Relin does and how agents should use it for webhook intake, delivery, replay, and anomaly review.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_supported_webhook_shapes
List the vendor webhook shapes Relin understands for event identity, ordering, and gap checks.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_setup_guide(provider)
Return concise setup guidance for connecting a webhook source and destination.
입력 스키마
{
"type": "object",
"properties": {
"provider": {
"type": "string",
"enum": [
"github",
"stripe",
"shopify",
"twilio",
"sendgrid",
"slack",
"custom"
]
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_api_keys
Authenticated tool to list API keys.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_api_key(name, scopes)
Authenticated tool to create API key.
입력 스키마
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"scopes": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
}
},
"required": [
"name"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴revoke_api_key(apiKeyId)
Authenticated tool to revoke API key.
입력 스키마
{
"type": "object",
"properties": {
"apiKeyId": {
"type": "string",
"minLength": 1
}
},
"required": [
"apiKeyId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_sources
Authenticated tool to list sources.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_source(name, vendor, signingSecret)
Authenticated tool to create source.
입력 스키마
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"vendor": {
"type": "string",
"enum": [
"github",
"stripe",
"shopify",
"twilio",
"sendgrid",
"slack",
"custom"
]
},
"signingSecret": {
"type": "string",
"maxLength": 500
}
},
"required": [
"name"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪rotate_source_token(sourceId)
Authenticated tool for rotating an ingest token and returning the replacement URL once.
입력 스키마
{
"type": "object",
"properties": {
"sourceId": {
"type": "string",
"minLength": 1
}
},
"required": [
"sourceId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴archive_source(sourceId)
Authenticated tool for deleting a source, disabling its routing, cancelling queued retries, clearing event-stream coordinator state, and pruning stored source records.
입력 스키마
{
"type": "object",
"properties": {
"sourceId": {
"type": "string",
"minLength": 1
}
},
"required": [
"sourceId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_destinations(sourceId)
Authenticated tool for listing outbound destinations and retry policy.
입력 스키마
{
"type": "object",
"properties": {
"sourceId": {
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_destination(sourceId, name, endpointUrl, signingSecret, retryMaxAttempts, ...)
Authenticated tool for creating an outbound destination and connection with retry policy and optional filters.
입력 스키마
{
"type": "object",
"properties": {
"sourceId": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"endpointUrl": {
"type": "string",
"format": "uri"
},
"signingSecret": {
"type": "string",
"maxLength": 500
},
"retryMaxAttempts": {
"type": "integer",
"minimum": 1,
"maximum": 20
},
"retryBackoffSeconds": {
"type": "string"
},
"rateLimitPerMinute": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"transformBodyPath": {
"type": "string"
},
"transformExpression": {
"type": "string"
},
"filterEventTypes": {
"type": "string"
},
"filterEntityKey": {
"type": "string"
},
"filterBodyPath": {
"type": "string"
},
"filterBodyValue": {
"type": "string"
}
},
"required": [
"sourceId",
"name",
"endpointUrl"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_apps
Authenticated tool to list apps.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_app(name, routingKeyBodyPath, routingKeyHeader)
Authenticated tool to create app.
입력 스키마
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"routingKeyBodyPath": {
"type": "string"
},
"routingKeyHeader": {
"type": "string"
}
},
"required": [
"name"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_app(appId)
Authenticated tool to get app.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
}
},
"required": [
"appId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_recipients(appId)
Authenticated tool to list recipients.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
}
},
"required": [
"appId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪upsert_recipient(appId, recipient, name)
Authenticated tool for creating or updating a recipient.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
},
"recipient": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string"
}
},
"required": [
"appId",
"recipient"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_endpoints(appId, recipient)
Authenticated tool to list recipient endpoints.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
},
"recipient": {
"type": "string"
}
},
"required": [
"appId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_endpoint(appId, recipient, recipientName, name, url, ...)
Authenticated tool to create endpoint.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
},
"recipient": {
"type": "string",
"minLength": 1
},
"recipientName": {
"type": "string"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"url": {
"type": "string",
"format": "uri"
},
"eventTypes": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
}
},
"required": [
"appId",
"recipient",
"url"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_endpoint(appId, endpointId)
Authenticated tool to get endpoint.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
},
"endpointId": {
"type": "string",
"minLength": 1
}
},
"required": [
"appId",
"endpointId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡update_endpoint(appId, endpointId, name, url, retryMaxAttempts, ...)
Authenticated tool to update endpoint.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
},
"endpointId": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"url": {
"type": "string",
"format": "uri"
},
"retryMaxAttempts": {
"type": "integer",
"minimum": 1,
"maximum": 20
},
"retryBackoffSeconds": {
"type": "string"
},
"rateLimitPerMinute": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"enabled": {
"type": "boolean"
}
},
"required": [
"appId",
"endpointId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴delete_endpoint(appId, endpointId)
Authenticated tool to disable endpoint.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
},
"endpointId": {
"type": "string",
"minLength": 1
}
},
"required": [
"appId",
"endpointId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪rotate_endpoint_secret(appId, endpointId)
Authenticated tool for rotating the signing secret for one endpoint.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
},
"endpointId": {
"type": "string",
"minLength": 1
}
},
"required": [
"appId",
"endpointId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_messages(appId, q, limit)
Authenticated tool to list messages.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
},
"q": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"required": [
"appId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡send_message(appId, recipient, type, data, messageId, ...)
Authenticated tool to send message.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
},
"recipient": {
"type": "string",
"minLength": 1
},
"type": {
"type": "string",
"minLength": 1
},
"data": {},
"messageId": {
"type": "string"
},
"idempotencyKey": {
"type": "string"
}
},
"required": [
"appId",
"recipient",
"type"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_message(appId, messageId)
Authenticated tool to get message.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
},
"messageId": {
"type": "string",
"minLength": 1
}
},
"required": [
"appId",
"messageId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_message_attempts(appId, messageId, limit)
Authenticated tool to list message attempts.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
},
"messageId": {
"type": "string",
"minLength": 1
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"required": [
"appId",
"messageId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪replay_message(appId, messageId)
Authenticated tool to replay message.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
},
"messageId": {
"type": "string",
"minLength": 1
}
},
"required": [
"appId",
"messageId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_event_types(appId)
Authenticated tool to list event types.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
}
},
"required": [
"appId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪upsert_event_type(appId, eventType, description, schema, examplePayload)
Authenticated tool to upsert event type.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
},
"eventType": {
"type": "string",
"minLength": 1
},
"description": {
"type": "string"
},
"schema": {},
"examplePayload": {}
},
"required": [
"appId",
"eventType"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴delete_event_type(appId, eventType)
Authenticated tool to archive event type.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
},
"eventType": {
"type": "string",
"minLength": 1
}
},
"required": [
"appId",
"eventType"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_portal_session(appId, recipient, recipientName, capabilities, theme, ...)
Authenticated tool to create portal session.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
},
"recipient": {
"type": "string",
"minLength": 1
},
"recipientName": {
"type": "string"
},
"capabilities": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"theme": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"returnUrl": {
"type": "string",
"format": "uri"
},
"expiresInSeconds": {
"type": "integer",
"minimum": 60,
"maximum": 86400
}
},
"required": [
"appId",
"recipient"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_portal_settings(appId)
Authenticated tool for reading portal branding defaults and host setup for an app.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
}
},
"required": [
"appId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡save_portal_settings(appId, brandName, logoUrl, primaryColor, accentColor, ...)
Authenticated tool for saving portal branding defaults for an app.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
},
"brandName": {
"type": "string"
},
"logoUrl": {
"type": "string",
"format": "uri"
},
"primaryColor": {
"type": "string"
},
"accentColor": {
"type": "string"
},
"backgroundColor": {
"type": "string"
},
"surfaceColor": {
"type": "string"
}
},
"required": [
"appId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_portal_hosts(appId)
Authenticated tool for listing stable portal hosts for an app.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
}
},
"required": [
"appId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_portal_host(appId, hostname, oidcIssuer, oidcClientId, oidcClientSecret, ...)
Authenticated tool for creating a stable portal host with OIDC sign-in.
입력 스키마
{
"type": "object",
"properties": {
"appId": {
"type": "string",
"minLength": 1
},
"hostname": {
"type": "string",
"minLength": 1
},
"oidcIssuer": {
"type": "string",
"format": "uri"
},
"oidcClientId": {
"type": "string",
"minLength": 1
},
"oidcClientSecret": {
"type": "string",
"minLength": 1
},
"oidcScopes": {
"type": "string"
},
"recipientClaim": {
"type": "string"
},
"nameClaim": {
"type": "string"
},
"emailClaim": {
"type": "string"
},
"allowedEmailDomain": {
"type": "string"
}
},
"required": [
"appId",
"hostname",
"oidcIssuer",
"oidcClientId",
"oidcClientSecret"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢check_portal_host(portalHostId)
Authenticated tool for refreshing hostname, certificate, and OIDC readiness for a stable portal host.
입력 스키마
{
"type": "object",
"properties": {
"portalHostId": {
"type": "string",
"minLength": 1
}
},
"required": [
"portalHostId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪ensure_webhook_setup(vendor, sourceId, sourceName, signingSecret, destinationName, ...)
Authenticated tool for idempotently setting up a vendor source and destination, returning the ingest URL when a new source is created.
입력 스키마
{
"type": "object",
"properties": {
"vendor": {
"type": "string",
"enum": [
"github",
"stripe",
"shopify",
"twilio",
"sendgrid",
"slack",
"custom"
]
},
"sourceId": {
"type": "string"
},
"sourceName": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"signingSecret": {
"type": "string",
"maxLength": 500
},
"destinationName": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"destinationUrl": {
"type": "string",
"format": "uri"
},
"destinationSigningSecret": {
"type": "string",
"maxLength": 500
},
"retryMaxAttempts": {
"type": "integer",
"minimum": 1,
"maximum": 20
},
"retryBackoffSeconds": {
"type": "string"
},
"rateLimitPerMinute": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"transformBodyPath": {
"type": "string"
},
"transformExpression": {
"type": "string"
},
"filterEventTypes": {
"type": "string"
},
"filterEntityKey": {
"type": "string"
},
"filterBodyPath": {
"type": "string"
},
"filterBodyValue": {
"type": "string"
}
},
"required": [
"vendor",
"destinationUrl"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_recent_events(sourceId, q, signatureStatus, failedDeliveryOnly, limit)
Authenticated tool for inspecting recent received events, duplicates, and signature status.
입력 스키마
{
"type": "object",
"properties": {
"sourceId": {
"type": "string"
},
"q": {
"type": "string"
},
"signatureStatus": {
"type": "string"
},
"failedDeliveryOnly": {
"type": "boolean"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_event_detail(eventId, includePayload)
Authenticated tool for reading one event with attempts, deliveries, and optional raw payload.
입력 스키마
{
"type": "object",
"properties": {
"eventId": {
"type": "string",
"minLength": 1
},
"includePayload": {
"type": "boolean"
}
},
"required": [
"eventId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_open_issues(q, sourceId, destinationId, limit)
Authenticated tool for listing open anomaly and delivery issues. Use q for smart lookup by anom_, dst_, evt_, or src_ IDs, or plain text like a status code or error message.
입력 스키마
{
"type": "object",
"properties": {
"q": {
"description": "Smart query. Recognizes anom_, dst_, evt_, and src_ IDs as exact filters; otherwise matches issue text, kind, status, destination name, IDs, and response status.",
"type": "string"
},
"sourceId": {
"description": "Only include issues for this source ID.",
"type": "string"
},
"destinationId": {
"description": "Only include failed delivery issues for this destination ID.",
"type": "string"
},
"limit": {
"description": "Maximum number of issues to return.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_delivery_attempts(eventId, destinationId, status, since, limit)
Authenticated tool for listing fanout delivery attempts with filters.
입력 스키마
{
"type": "object",
"properties": {
"eventId": {
"type": "string"
},
"destinationId": {
"type": "string"
},
"status": {
"type": "string"
},
"since": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_retry_jobs(status, limit)
Authenticated tool to list retry jobs.
입력 스키마
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"queued",
"completed",
"cancelled"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_metrics_summary(windowHours)
Authenticated tool for delivery, failure, duplicate, and open-issue rollups.
입력 스키마
{
"type": "object",
"properties": {
"windowHours": {
"type": "integer",
"minimum": 1,
"maximum": 720
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_alert_channels
Authenticated tool to list alert channels.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_alert_channel(type, name, targetUrl, targetEmail, kinds)
Authenticated tool to create alert channel.
입력 스키마
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"webhook",
"slack",
"email"
]
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"targetUrl": {
"type": "string",
"format": "uri"
},
"targetEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"kinds": {
"type": "array",
"items": {
"type": "string",
"enum": [
"fanout_failed",
"missing_lifecycle_event",
"duplicate_event",
"signature_failed",
"provider_retry",
"out_of_order_event",
"terminal_state_regression"
]
}
}
},
"required": [
"type",
"name"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_slack_connect_url
Authenticated tool for returning the dashboard Slack OAuth connect URL and expected redirect URL.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪replay_event(eventId)
Authenticated tool for queueing a replay of a single received event.
입력 스키마
{
"type": "object",
"properties": {
"eventId": {
"type": "string",
"minLength": 1
}
},
"required": [
"eventId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪replay_events(sourceId, q, signatureStatus, failedDeliveryOnly, windowHours, ...)
Authenticated tool for queueing replay by source, query, signature status, failed-delivery state, and time window.
입력 스키마
{
"type": "object",
"properties": {
"sourceId": {
"type": "string"
},
"q": {
"type": "string"
},
"signatureStatus": {
"type": "string"
},
"failedDeliveryOnly": {
"type": "boolean"
},
"windowHours": {
"type": "integer",
"minimum": 1,
"maximum": 720
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪retry_failed_deliveries(destinationId, windowHours, limit)
Authenticated tool for queueing immediate retries for failed fanout deliveries.
입력 스키마
{
"type": "object",
"properties": {
"destinationId": {
"type": "string"
},
"windowHours": {
"anyOf": [
{
"type": "number",
"const": 24
},
{
"type": "number",
"const": 72
},
{
"type": "number",
"const": 168
}
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴cancel_queued_retries(destinationId)
Authenticated tool for cancelling queued retry jobs for a workspace or destination.
입력 스키마
{
"type": "object",
"properties": {
"destinationId": {
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴resolve_anomalies(anomalyIds)
Authenticated tool for marking one or more open anomalies resolved by anomaly_id.
입력 스키마
{
"type": "object",
"properties": {
"anomalyIds": {
"minItems": 1,
"maxItems": 500,
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
}
},
"required": [
"anomalyIds"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}커뮤니티
증거