Nymrel
Four public utilities plus seven OAuth-protected Remote read tools for paired Nymrel devices.
사용해야 할까요
품질 및 안전성
발견 사항 (1)
- LOWnymrel_remote_list_devices에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"nymrel": {
"url": "https://mcp.nymrel.com/mcp"
}
}
}원격 엔드포인트
https://mcp.nymrel.com/mcpstreamable-http할 수 있는 일
도구 목록
도구 (11)
🟢nymrel_audit_website(url)
Audit one public website for SEO, schema, and AI discoverability. Returns the score, grade, discoverability status, detected schema types and recommendations supplied by the audit. Results may contain only an aggregate summary; additional per-check evidence may be included. Report robots.txt, sitemap.xml, llms.txt or AI-crawler checks only when their evidence is present in the result; absent checks are unreported, not proven by an aggregate score or PASS. Preserve unmeasured checks and empty recommendations without inventing findings. This is not a ranking guarantee or a security, legal-compliance or crawler-access certification.
입력 스키마
{
"type": "object",
"properties": {
"url": {
"type": "string"
}
},
"required": [
"url"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"anyOf": [
{
"additionalProperties": true,
"properties": {
"score": {
"maximum": 100,
"minimum": 0,
"title": "Score",
"type": "number"
},
"grade": {
"title": "Grade",
"type": "string"
},
"ai_discoverability_status": {
"title": "Ai Discoverability Status",
"type": "string"
},
"schema_detected": {
"items": {
"type": "string"
},
"title": "Schema Detected",
"type": "array"
},
"recommendations": {
"items": {
"type": "string"
},
"title": "Recommendations",
"type": "array"
},
"full_report_url": {
"title": "Full Report Url",
"type": "string"
}
},
"required": [
"score",
"grade",
"ai_discoverability_status",
"schema_detected",
"recommendations",
"full_report_url"
],
"title": "AuditSummary",
"type": "object"
},
{
"additionalProperties": true,
"properties": {
"status": {
"const": "error",
"title": "Status",
"type": "string"
},
"error": {
"additionalProperties": true,
"properties": {
"code": {
"title": "Code",
"type": "string"
},
"message": {
"title": "Message",
"type": "string"
},
"retryable": {
"title": "Retryable",
"type": "boolean"
}
},
"required": [
"code",
"message",
"retryable"
],
"title": "ErrorDetail",
"type": "object"
}
},
"required": [
"status",
"error"
],
"title": "ErrorResult",
"type": "object"
}
]
}🟢nymrel_golf_bag_gap(clubs)
Analyse carry-distance gaps for a structured list of golf clubs. Every club needs a ``name`` and its measured ``carry_distance_yards``; ``loft_degrees`` is optional. Pass 1 to 14 clubs with unique names. The upstream rejects any other key, so send only these three.
입력 스키마
{
"type": "object",
"properties": {
"clubs": {
"items": {
"additionalProperties": false,
"description": "One club. ``loft_degrees`` is the only optional key the upstream allows.\n\nA pydantic model, not a TypedDict, and not for style: the hosted runtime's\nschema generator degraded ``typing.TypedDict`` to a bare object (proven\nlive 2026-08-17 - the docstring survived, the properties vanished), while\n``BaseModel`` publishes named properties on every pydantic v2 / Python\npairing. ``extra=\"forbid\"`` mirrors the upstream's strict validator, so\nthe published schema and the enforcement are the same contract.",
"properties": {
"name": {
"type": "string"
},
"carry_distance_yards": {
"type": "integer"
},
"loft_degrees": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"name",
"carry_distance_yards"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"clubs"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"anyOf": [
{
"additionalProperties": true,
"properties": {
"average_gap_yards": {
"minimum": 0,
"title": "Average Gap Yards",
"type": "number"
},
"problem_gaps": {
"items": {
"type": "string"
},
"title": "Problem Gaps",
"type": "array"
},
"recommendations": {
"items": {
"type": "string"
},
"title": "Recommendations",
"type": "array"
}
},
"required": [
"average_gap_yards",
"problem_gaps",
"recommendations"
],
"title": "GolfResult",
"type": "object"
},
{
"additionalProperties": true,
"properties": {
"status": {
"const": "error",
"title": "Status",
"type": "string"
},
"error": {
"additionalProperties": true,
"properties": {
"code": {
"title": "Code",
"type": "string"
},
"message": {
"title": "Message",
"type": "string"
},
"retryable": {
"title": "Retryable",
"type": "boolean"
}
},
"required": [
"code",
"message",
"retryable"
],
"title": "ErrorDetail",
"type": "object"
}
},
"required": [
"status",
"error"
],
"title": "ErrorResult",
"type": "object"
}
]
}🟢nymrel_find_domain(keyword_or_concept, tlds)
Suggest domain names and check each one against public registry records. A name is only reported available when the registry clearly says it is free. When the lookup is inconclusive `availability_checked` is false and `available` is false, so read that as "not confirmed free" rather than "already taken" - some TLDs have no registry service to ask. Confirm at a registrar before buying. `brandability_score` is an opinion about the string, not a claim about how the name will perform; `brandability_factors` reports what it was computed from so you can weigh it yourself.
입력 스키마
{
"type": "object",
"properties": {
"keyword_or_concept": {
"type": "string"
},
"tlds": {
"anyOf": [
{
"items": {
"examples": [
".com",
".ai",
".app",
".dev"
],
"pattern": "^\\.[a-z]{2,24}$",
"type": "string"
},
"maxItems": 6,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Up to 6 TLDs, each written with its leading dot - \".com\", not \"com\". The upstream enforces this with a regex and rejects the request otherwise. Defaults to .com, .ai, .app and .dev."
}
},
"required": [
"keyword_or_concept"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"anyOf": [
{
"additionalProperties": true,
"properties": {
"suggestions": {
"items": {
"additionalProperties": true,
"properties": {
"domain": {
"title": "Domain",
"type": "string"
},
"available": {
"title": "Available",
"type": "boolean"
},
"availability_checked": {
"title": "Availability Checked",
"type": "boolean"
},
"brandability_score": {
"maximum": 100,
"minimum": 0,
"title": "Brandability Score",
"type": "number"
},
"brandability_factors": {
"additionalProperties": true,
"properties": {
"label_length": {
"title": "Label Length",
"type": "integer"
},
"contains_digit": {
"title": "Contains Digit",
"type": "boolean"
},
"contains_hyphen": {
"title": "Contains Hyphen",
"type": "boolean"
},
"contains_vowel": {
"title": "Contains Vowel",
"type": "boolean"
}
},
"required": [
"label_length",
"contains_digit",
"contains_hyphen",
"contains_vowel"
],
"title": "BrandabilityFactors",
"type": "object"
}
},
"required": [
"domain",
"available",
"availability_checked",
"brandability_score",
"brandability_factors"
],
"title": "DomainSuggestion",
"type": "object"
},
"title": "Suggestions",
"type": "array"
}
},
"required": [
"suggestions"
],
"title": "DomainResult",
"type": "object"
},
{
"additionalProperties": true,
"properties": {
"status": {
"const": "error",
"title": "Status",
"type": "string"
},
"error": {
"additionalProperties": true,
"properties": {
"code": {
"title": "Code",
"type": "string"
},
"message": {
"title": "Message",
"type": "string"
},
"retryable": {
"title": "Retryable",
"type": "boolean"
}
},
"required": [
"code",
"message",
"retryable"
],
"title": "ErrorDetail",
"type": "object"
}
},
"required": [
"status",
"error"
],
"title": "ErrorResult",
"type": "object"
}
]
}🟢nymrel_social_clip_score(transcript_text, target_platform)
Measure what the opening of a short-video transcript actually does. Returns each measured signal - opening word count, whether it opens on a hook pattern, whether it addresses the viewer, curiosity signals, whether the total word count sits in the platform's range - plus `hook_score`, a 0-100 rollup of exactly those signals, and suggested edits. `target_platform` accepts `tiktok`, `instagram_reels`, `youtube_shorts`, or `x`. The `reels` and `shorts` aliases normalize to their corresponding canonical IDs, which the result echoes. Every figure describes the text the caller supplied. This does not estimate reach, views, retention or virality; those are outcomes in the world that this tool never observes. Read `signals` to see what moved the score.
입력 스키마
{
"type": "object",
"properties": {
"transcript_text": {
"type": "string"
},
"target_platform": {
"default": "tiktok",
"enum": [
"tiktok",
"reels",
"shorts",
"instagram_reels",
"youtube_shorts",
"x"
],
"type": "string"
}
},
"required": [
"transcript_text"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"anyOf": [
{
"additionalProperties": true,
"properties": {
"target_platform": {
"enum": [
"tiktok",
"instagram_reels",
"youtube_shorts",
"x"
],
"title": "Target Platform",
"type": "string"
},
"hook_score": {
"maximum": 100,
"minimum": 0,
"title": "Hook Score",
"type": "number"
},
"hook_strength": {
"title": "Hook Strength",
"type": "string"
},
"signals": {
"additionalProperties": true,
"properties": {
"opening_word_count": {
"minimum": 0,
"title": "Opening Word Count",
"type": "integer"
},
"opens_with_hook_pattern": {
"title": "Opens With Hook Pattern",
"type": "boolean"
},
"addresses_viewer": {
"title": "Addresses Viewer",
"type": "boolean"
},
"has_curiosity_signal": {
"title": "Has Curiosity Signal",
"type": "boolean"
},
"opening_contains_number": {
"title": "Opening Contains Number",
"type": "boolean"
},
"total_word_count": {
"minimum": 0,
"title": "Total Word Count",
"type": "integer"
},
"platform_word_range": {
"items": {
"type": "integer"
},
"maxItems": 2,
"minItems": 2,
"title": "Platform Word Range",
"type": "array"
},
"total_word_count_in_platform_range": {
"title": "Total Word Count In Platform Range",
"type": "boolean"
}
},
"required": [
"opening_word_count",
"opens_with_hook_pattern",
"addresses_viewer",
"has_curiosity_signal",
"opening_contains_number",
"total_word_count",
"platform_word_range",
"total_word_count_in_platform_range"
],
"title": "ClipSignals",
"type": "object"
},
"suggested_edits": {
"items": {
"type": "string"
},
"title": "Suggested Edits",
"type": "array"
}
},
"required": [
"target_platform",
"hook_score",
"hook_strength",
"signals",
"suggested_edits"
],
"title": "ClipResult",
"type": "object"
},
{
"additionalProperties": true,
"properties": {
"status": {
"const": "error",
"title": "Status",
"type": "string"
},
"error": {
"additionalProperties": true,
"properties": {
"code": {
"title": "Code",
"type": "string"
},
"message": {
"title": "Message",
"type": "string"
},
"retryable": {
"title": "Retryable",
"type": "boolean"
}
},
"required": [
"code",
"message",
"retryable"
],
"title": "ErrorDetail",
"type": "object"
}
},
"required": [
"status",
"error"
],
"title": "ErrorResult",
"type": "object"
}
]
}🟢nymrel_remote_list_devices
Use this when the user wants to see paired Nymrel Remote devices and current reachability before working with one.
입력 스키마
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢nymrel_remote_read_file(device, path, offset, length)
Use this when the user explicitly wants Nymrel Remote to read a UTF-8 text file with optional line pagination. Select the target with the optional device argument.
입력 스키마
{
"type": "object",
"properties": {
"device": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"description": "Paired device id or exact device name. Omit only when exactly one eligible device is available."
},
"path": {
"type": "string",
"minLength": 1,
"description": "Absolute path or path relative to the configured working directory."
},
"offset": {
"type": "integer",
"default": 0,
"description": "0-based start line; negative values read from the tail."
},
"length": {
"type": "integer",
"minimum": 1,
"maximum": 10000,
"default": 1000
}
},
"required": [
"path"
],
"additionalProperties": false
}🟢nymrel_remote_list_directory(device, path, depth)
Use this when the user explicitly wants Nymrel Remote to list a directory tree with a bounded recursion depth. Select the target with the optional device argument.
입력 스키마
{
"type": "object",
"properties": {
"device": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"description": "Paired device id or exact device name. Omit only when exactly one eligible device is available."
},
"path": {
"type": "string",
"minLength": 1,
"description": "Absolute path or path relative to the configured working directory."
},
"depth": {
"type": "integer",
"minimum": 1,
"maximum": 8,
"default": 2
}
},
"required": [
"path"
],
"additionalProperties": false
}🟢nymrel_remote_get_file_info(device, path)
Use this when the user explicitly wants Nymrel Remote to return metadata for a file or directory. Select the target with the optional device argument.
입력 스키마
{
"type": "object",
"properties": {
"device": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"description": "Paired device id or exact device name. Omit only when exactly one eligible device is available."
},
"path": {
"type": "string",
"minLength": 1,
"description": "Absolute path or path relative to the configured working directory."
}
},
"required": [
"path"
],
"additionalProperties": false
}🟢nymrel_remote_search_files(device, path, pattern, ignoreCase, maxResults, ...)
Use this when the user explicitly wants Nymrel Remote to search file and directory names below an allowed path. Select the target with the optional device argument.
입력 스키마
{
"type": "object",
"properties": {
"device": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"description": "Paired device id or exact device name. Omit only when exactly one eligible device is available."
},
"path": {
"type": "string",
"minLength": 1,
"description": "Absolute path or path relative to the configured working directory."
},
"pattern": {
"type": "string",
"minLength": 1,
"maxLength": 512
},
"ignoreCase": {
"type": "boolean",
"default": true
},
"maxResults": {
"type": "integer",
"minimum": 1,
"maximum": 500,
"default": 100
},
"maxDepth": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"default": 10
}
},
"required": [
"path",
"pattern"
],
"additionalProperties": false
}🟢nymrel_remote_search_content(device, path, pattern, filePattern, literalSearch, ...)
Use this when the user explicitly wants Nymrel Remote to search UTF-8 file contents below an allowed path. Select the target with the optional device argument.
입력 스키마
{
"type": "object",
"properties": {
"device": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"description": "Paired device id or exact device name. Omit only when exactly one eligible device is available."
},
"path": {
"type": "string",
"minLength": 1,
"description": "Absolute path or path relative to the configured working directory."
},
"pattern": {
"type": "string",
"minLength": 1,
"maxLength": 2048
},
"filePattern": {
"type": "string",
"maxLength": 256
},
"literalSearch": {
"type": "boolean",
"default": true
},
"ignoreCase": {
"type": "boolean",
"default": true
},
"maxResults": {
"type": "integer",
"minimum": 1,
"maximum": 500,
"default": 100
},
"maxDepth": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"default": 10
}
},
"required": [
"path",
"pattern"
],
"additionalProperties": false
}🟢nymrel_remote_get_read_result(callId)
Retrieve the result of your pending Nymrel Remote read using its callId. If a file inspection returns pending, use this tool instead of submitting that inspection again. It never starts a new device operation. If still pending, wait briefly before checking again.
입력 스키마
{
"type": "object",
"properties": {
"callId": {
"type": "string",
"minLength": 1,
"maxLength": 256
}
},
"required": [
"callId"
],
"additionalProperties": false
}커뮤니티
증거