Koskamo

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.

Nymrel MCP logo, by NymrelCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Nymrel
MCP endpoint (Streamable HTTP)
https://mcp.nymrel.com/mcp
Vendor documentation

What 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

Community listingRegistry 1.4.0
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
Server-advertised capabilities
{
  "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
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

nymrel_audit_website input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
nymrel_audit_website output schema
{
  "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
    }
  ]
}
nymrel_audit_website annotations
{
  "title": "Audit website discoverability",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
nymrel_golf_bag_gap — Analyse golf bag gaps
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

nymrel_golf_bag_gap input schema
{
  "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
}
nymrel_golf_bag_gap output schema
{
  "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
    }
  ]
}
nymrel_golf_bag_gap annotations
{
  "title": "Analyse golf bag gaps",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
nymrel_find_domain — Find domain names
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

nymrel_find_domain input schema
{
  "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
}
nymrel_find_domain output schema
{
  "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
    }
  ]
}
nymrel_find_domain annotations
{
  "title": "Find domain names",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
nymrel_social_clip_score — Measure a short-video hook
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

nymrel_social_clip_score input schema
{
  "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
}
nymrel_social_clip_score output schema
{
  "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
    }
  ]
}
nymrel_social_clip_score annotations
{
  "title": "Measure a short-video hook",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
nymrel_remote_list_devices — List remote devices
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants to see paired Nymrel Remote devices and current reachability before working with one.

nymrel_remote_list_devices input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
nymrel_remote_list_devices annotations
{
  "title": "List remote devices",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
nymrel_remote_read_file — read file
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

nymrel_remote_read_file input schema
{
  "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
}
nymrel_remote_read_file annotations
{
  "title": "read file",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
nymrel_remote_list_directory — list directory
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

nymrel_remote_list_directory input schema
{
  "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
}
nymrel_remote_list_directory annotations
{
  "title": "list directory",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
nymrel_remote_get_file_info — get file info
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

nymrel_remote_get_file_info input schema
{
  "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
}
nymrel_remote_get_file_info annotations
{
  "title": "get file info",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
nymrel_remote_search_files — search files
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

nymrel_remote_search_files input schema
{
  "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
}
nymrel_remote_search_files annotations
{
  "title": "search files",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
nymrel_remote_search_content — search content
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

nymrel_remote_search_content input schema
{
  "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
}
nymrel_remote_search_content annotations
{
  "title": "search content",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
nymrel_remote_get_read_result — Get remote read result
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

nymrel_remote_get_read_result input schema
{
  "type": "object",
  "required": [
    "callId"
  ],
  "properties": {
    "callId": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1
    }
  },
  "additionalProperties": false
}
nymrel_remote_get_read_result annotations
{
  "title": "Get remote read result",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}

Prompts

0 advertised

No prompt definitions available.

Resources

0 advertised

No resource definitions available.

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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http nymrel-mcp https://mcp.nymrel.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add nymrel-mcp --url https://mcp.nymrel.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable nymrel-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "nymrel-mcp": {
      "url": "https://mcp.nymrel.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "nymrel-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.nymrel.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start nymrel-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "nymrel-mcp": {
      "type": "http",
      "url": "https://mcp.nymrel.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http nymrel-mcp https://mcp.nymrel.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "nymrel-mcp": {
      "url": "https://mcp.nymrel.com/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.