Nymrel MCP
A hosted MCP server providing access to Nymrel's public utility tools, including website audits, domain finding, golf bag gap analysis, and social clip scoring. It supports optional OAuth2 authentication and exposes additional private tools for paired devices.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.nymrel.com/mcpWhat you can do with it
- Run website audits via AI agents
- Find domain information programmatically
- Calculate golf bag gap metrics
- Score social clip hooks
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- Nymrel Public Tool Suite 3.4.7
- MCP protocol
- 2025-06-18
- Tools
- 11 advertised
- Resources
- 0 advertised
- Resource templates
- 0 advertised
- Prompts
- 0 advertised
{
"tools": {
"listChanged": true
},
"logging": {},
"prompts": {
"listChanged": true
},
"resources": {
"subscribe": false,
"listChanged": true
},
"extensions": {
"io.modelcontextprotocol/ui": {}
},
"experimental": {}
}Tools
11 advertised
nymrel_audit_website — Audit website discoverability
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",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"type": "object",
"title": "AuditSummary",
"required": [
"score",
"grade",
"ai_discoverability_status",
"schema_detected",
"recommendations",
"full_report_url"
],
"properties": {
"grade": {
"type": "string",
"title": "Grade"
},
"score": {
"type": "number",
"title": "Score",
"maximum": 100,
"minimum": 0
},
"full_report_url": {
"type": "string",
"title": "Full Report Url"
},
"recommendations": {
"type": "array",
"items": {
"type": "string"
},
"title": "Recommendations"
},
"schema_detected": {
"type": "array",
"items": {
"type": "string"
},
"title": "Schema Detected"
},
"ai_discoverability_status": {
"type": "string",
"title": "Ai Discoverability Status"
}
},
"additionalProperties": true
},
{
"type": "object",
"title": "ErrorResult",
"required": [
"status",
"error"
],
"properties": {
"error": {
"type": "object",
"title": "ErrorDetail",
"required": [
"code",
"message",
"retryable"
],
"properties": {
"code": {
"type": "string",
"title": "Code"
},
"message": {
"type": "string",
"title": "Message"
},
"retryable": {
"type": "boolean",
"title": "Retryable"
}
},
"additionalProperties": true
},
"status": {
"type": "string",
"const": "error",
"title": "Status"
}
},
"additionalProperties": true
}
]
}{
"title": "Audit website discoverability",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}nymrel_golf_bag_gap — Analyse golf bag gaps
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",
"required": [
"clubs"
],
"properties": {
"clubs": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"carry_distance_yards"
],
"properties": {
"name": {
"type": "string"
},
"loft_degrees": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null
},
"carry_distance_yards": {
"type": "integer"
}
},
"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.",
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"type": "object",
"title": "GolfResult",
"required": [
"average_gap_yards",
"problem_gaps",
"recommendations"
],
"properties": {
"problem_gaps": {
"type": "array",
"items": {
"type": "string"
},
"title": "Problem Gaps"
},
"recommendations": {
"type": "array",
"items": {
"type": "string"
},
"title": "Recommendations"
},
"average_gap_yards": {
"type": "number",
"title": "Average Gap Yards",
"minimum": 0
}
},
"additionalProperties": true
},
{
"type": "object",
"title": "ErrorResult",
"required": [
"status",
"error"
],
"properties": {
"error": {
"type": "object",
"title": "ErrorDetail",
"required": [
"code",
"message",
"retryable"
],
"properties": {
"code": {
"type": "string",
"title": "Code"
},
"message": {
"type": "string",
"title": "Message"
},
"retryable": {
"type": "boolean",
"title": "Retryable"
}
},
"additionalProperties": true
},
"status": {
"type": "string",
"const": "error",
"title": "Status"
}
},
"additionalProperties": true
}
]
}{
"title": "Analyse golf bag gaps",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}nymrel_find_domain — Find domain names
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",
"required": [
"keyword_or_concept"
],
"properties": {
"tlds": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"pattern": "^\\.[a-z]{2,24}$",
"examples": [
".com",
".ai",
".app",
".dev"
]
},
"maxItems": 6
},
{
"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."
},
"keyword_or_concept": {
"type": "string"
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"type": "object",
"title": "DomainResult",
"required": [
"suggestions"
],
"properties": {
"suggestions": {
"type": "array",
"items": {
"type": "object",
"title": "DomainSuggestion",
"required": [
"domain",
"available",
"availability_checked",
"brandability_score",
"brandability_factors"
],
"properties": {
"domain": {
"type": "string",
"title": "Domain"
},
"available": {
"type": "boolean",
"title": "Available"
},
"brandability_score": {
"type": "number",
"title": "Brandability Score",
"maximum": 100,
"minimum": 0
},
"availability_checked": {
"type": "boolean",
"title": "Availability Checked"
},
"brandability_factors": {
"type": "object",
"title": "BrandabilityFactors",
"required": [
"label_length",
"contains_digit",
"contains_hyphen",
"contains_vowel"
],
"properties": {
"label_length": {
"type": "integer",
"title": "Label Length"
},
"contains_digit": {
"type": "boolean",
"title": "Contains Digit"
},
"contains_vowel": {
"type": "boolean",
"title": "Contains Vowel"
},
"contains_hyphen": {
"type": "boolean",
"title": "Contains Hyphen"
}
},
"additionalProperties": true
}
},
"additionalProperties": true
},
"title": "Suggestions"
}
},
"additionalProperties": true
},
{
"type": "object",
"title": "ErrorResult",
"required": [
"status",
"error"
],
"properties": {
"error": {
"type": "object",
"title": "ErrorDetail",
"required": [
"code",
"message",
"retryable"
],
"properties": {
"code": {
"type": "string",
"title": "Code"
},
"message": {
"type": "string",
"title": "Message"
},
"retryable": {
"type": "boolean",
"title": "Retryable"
}
},
"additionalProperties": true
},
"status": {
"type": "string",
"const": "error",
"title": "Status"
}
},
"additionalProperties": true
}
]
}{
"title": "Find domain names",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}nymrel_social_clip_score — Measure a short-video hook
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",
"required": [
"transcript_text"
],
"properties": {
"target_platform": {
"enum": [
"tiktok",
"reels",
"shorts",
"instagram_reels",
"youtube_shorts",
"x"
],
"type": "string",
"default": "tiktok"
},
"transcript_text": {
"type": "string"
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"type": "object",
"title": "ClipResult",
"required": [
"target_platform",
"hook_score",
"hook_strength",
"signals",
"suggested_edits"
],
"properties": {
"signals": {
"type": "object",
"title": "ClipSignals",
"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"
],
"properties": {
"addresses_viewer": {
"type": "boolean",
"title": "Addresses Viewer"
},
"total_word_count": {
"type": "integer",
"title": "Total Word Count",
"minimum": 0
},
"opening_word_count": {
"type": "integer",
"title": "Opening Word Count",
"minimum": 0
},
"platform_word_range": {
"type": "array",
"items": {
"type": "integer"
},
"title": "Platform Word Range",
"maxItems": 2,
"minItems": 2
},
"has_curiosity_signal": {
"type": "boolean",
"title": "Has Curiosity Signal"
},
"opening_contains_number": {
"type": "boolean",
"title": "Opening Contains Number"
},
"opens_with_hook_pattern": {
"type": "boolean",
"title": "Opens With Hook Pattern"
},
"total_word_count_in_platform_range": {
"type": "boolean",
"title": "Total Word Count In Platform Range"
}
},
"additionalProperties": true
},
"hook_score": {
"type": "number",
"title": "Hook Score",
"maximum": 100,
"minimum": 0
},
"hook_strength": {
"type": "string",
"title": "Hook Strength"
},
"suggested_edits": {
"type": "array",
"items": {
"type": "string"
},
"title": "Suggested Edits"
},
"target_platform": {
"enum": [
"tiktok",
"instagram_reels",
"youtube_shorts",
"x"
],
"type": "string",
"title": "Target Platform"
}
},
"additionalProperties": true
},
{
"type": "object",
"title": "ErrorResult",
"required": [
"status",
"error"
],
"properties": {
"error": {
"type": "object",
"title": "ErrorDetail",
"required": [
"code",
"message",
"retryable"
],
"properties": {
"code": {
"type": "string",
"title": "Code"
},
"message": {
"type": "string",
"title": "Message"
},
"retryable": {
"type": "boolean",
"title": "Retryable"
}
},
"additionalProperties": true
},
"status": {
"type": "string",
"const": "error",
"title": "Status"
}
},
"additionalProperties": true
}
]
}{
"title": "Measure a short-video hook",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}nymrel_remote_list_devices — List remote 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
}{
"title": "List remote devices",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}nymrel_remote_read_file — read file
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",
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"minLength": 1,
"description": "Absolute path or path relative to the configured working directory."
},
"device": {
"type": "string",
"maxLength": 256,
"minLength": 1,
"description": "Paired device id or exact device name. Omit only when exactly one eligible device is available."
},
"length": {
"type": "integer",
"default": 1000,
"maximum": 10000,
"minimum": 1
},
"offset": {
"type": "integer",
"default": 0,
"description": "0-based start line; negative values read from the tail."
}
},
"additionalProperties": false
}{
"title": "read file",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}nymrel_remote_list_directory — list directory
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",
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"minLength": 1,
"description": "Absolute path or path relative to the configured working directory."
},
"depth": {
"type": "integer",
"default": 2,
"maximum": 8,
"minimum": 1
},
"device": {
"type": "string",
"maxLength": 256,
"minLength": 1,
"description": "Paired device id or exact device name. Omit only when exactly one eligible device is available."
}
},
"additionalProperties": false
}{
"title": "list directory",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}nymrel_remote_get_file_info — get file info
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",
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"minLength": 1,
"description": "Absolute path or path relative to the configured working directory."
},
"device": {
"type": "string",
"maxLength": 256,
"minLength": 1,
"description": "Paired device id or exact device name. Omit only when exactly one eligible device is available."
}
},
"additionalProperties": false
}{
"title": "get file info",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}nymrel_remote_search_files — search files
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",
"required": [
"path",
"pattern"
],
"properties": {
"path": {
"type": "string",
"minLength": 1,
"description": "Absolute path or path relative to the configured working directory."
},
"device": {
"type": "string",
"maxLength": 256,
"minLength": 1,
"description": "Paired device id or exact device name. Omit only when exactly one eligible device is available."
},
"pattern": {
"type": "string",
"maxLength": 512,
"minLength": 1
},
"maxDepth": {
"type": "integer",
"default": 10,
"maximum": 20,
"minimum": 1
},
"ignoreCase": {
"type": "boolean",
"default": true
},
"maxResults": {
"type": "integer",
"default": 100,
"maximum": 500,
"minimum": 1
}
},
"additionalProperties": false
}{
"title": "search files",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}nymrel_remote_search_content — search content
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",
"required": [
"path",
"pattern"
],
"properties": {
"path": {
"type": "string",
"minLength": 1,
"description": "Absolute path or path relative to the configured working directory."
},
"device": {
"type": "string",
"maxLength": 256,
"minLength": 1,
"description": "Paired device id or exact device name. Omit only when exactly one eligible device is available."
},
"pattern": {
"type": "string",
"maxLength": 2048,
"minLength": 1
},
"maxDepth": {
"type": "integer",
"default": 10,
"maximum": 20,
"minimum": 1
},
"ignoreCase": {
"type": "boolean",
"default": true
},
"maxResults": {
"type": "integer",
"default": 100,
"maximum": 500,
"minimum": 1
},
"filePattern": {
"type": "string",
"maxLength": 256
},
"literalSearch": {
"type": "boolean",
"default": true
}
},
"additionalProperties": false
}{
"title": "search content",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}nymrel_remote_get_read_result — Get remote read result
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",
"required": [
"callId"
],
"properties": {
"callId": {
"type": "string",
"maxLength": 256,
"minLength": 1
}
},
"additionalProperties": false
}{
"title": "Get remote read result",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}Prompts
0 advertised
Resources
0 advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1030 ms
- 95th percentile latency
- 1030 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1030 ms · metadata changed · 11 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http nymrel-mcp https://mcp.nymrel.com/mcpCodex
codex mcp add nymrel-mcp --url https://mcp.nymrel.com/mcpCursor
{
"mcpServers": {
"nymrel-mcp": {
"url": "https://mcp.nymrel.com/mcp"
}
}
}Cline
{
"mcpServers": {
"nymrel-mcp": {
"type": "streamableHttp",
"url": "https://mcp.nymrel.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"nymrel-mcp": {
"type": "http",
"url": "https://mcp.nymrel.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http nymrel-mcp https://mcp.nymrel.com/mcpClaude Desktop
{
"mcpServers": {
"nymrel-mcp": {
"url": "https://mcp.nymrel.com/mcp"
}
}
}Windsurf
{
"mcpServers": {
"nymrel-mcp": {
"serverUrl": "https://mcp.nymrel.com/mcp"
}
}
}Let your agent find its tools
Find servers like Nymrel MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.