Scopeweb MCP
An MCP server providing domain intelligence, including name suggestion, scoring, live availability checking, and pricing quotes. It helps agents evaluate domain names by verifying registration status, renewal costs, and brand suitability before purchase.
Endpoint and access
OAuth sign-in: the first time you connect, your client opens the vendor's own authorization prompt in a browser.
https://mcp.scopeweb.io/mcpWhat its tools do
21 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (16)
Can change data (5)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to scopeweb.io ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Suggest and rank domain names based on concepts
- Check live availability and renewal costs for domains
- Audit existing domains and list owned assets
- Generate purchase quotes with confirmation links
Source and maintenance
Protocol and capabilities
- Server
- scopeweb 0.1.0
- MCP protocol negotiated in check
- 2025-06-18
- Tools
- 21 advertised
- Resources
- 4 advertised
- Resource templates
- Sign-in required
- Prompts
- 3 advertised
{
"tools": {},
"prompts": {},
"resources": {}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
21 advertised
search
Find domain names for an idea. Returns candidate names across every ending, each with the state we can defend: sellable, restricted, not ours to sell, taken, or not checked. Pass the concept, not a domain.
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"description": "A word or an idea, for example \"calm inbox\"."
}
}
}{
"type": "object",
"required": [
"results",
"note"
],
"properties": {
"note": {
"type": "string"
},
"results": {
"type": "array",
"description": "Candidate names with the state we can defend."
}
}
}{
"title": "Find names for an idea (read-only)",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}fetch
Everything we hold about one domain: whether it is registered, what it costs to claim AND what it renews at, and where each number came from. Pass a domain name as the id, for example "atlas.io".
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "A domain name."
}
}
}{
"type": "object",
"required": [
"id",
"title",
"text",
"url",
"metadata"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string"
},
"text": {
"type": "string",
"description": "Everything we hold, as prose."
},
"title": {
"type": "string"
},
"metadata": {
"type": "object"
}
}
}{
"title": "Everything about one domain (read-only)",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}create_draft
Stores a draft website in the user's Scopeweb portfolio and returns a persistent draft_id and a live preview_url. For when the user wants a page, site or landing draft for a name and none exists yet. Drafts persist across conversations. Content is screened on every version; a flagged draft is still stored, but its preview serves HTTP 451. Cannot spend money.
{
"type": "object",
"required": [
"files"
],
"properties": {
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"path",
"content"
],
"properties": {
"path": {
"type": "string"
},
"content": {
"type": "string"
}
}
},
"description": "Site files. index.html required for a browsable preview."
},
"name_hint": {
"type": "string",
"description": "Working name for the project"
},
"description": {
"type": "string",
"description": "One paragraph on what this is"
}
}
}{
"title": "Save a draft site",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}update_draft
Writes a new version of an existing draft. Acts as a patch: files you send are written as a new version, files you omit carry forward unchanged, and earlier versions are kept. For when the user wants to change the copy, sections or layout of a draft that already exists. Returns the new version and preview_url. Cannot spend money.
{
"type": "object",
"required": [
"draft_id",
"files"
],
"properties": {
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"path",
"content"
],
"properties": {
"path": {
"type": "string"
},
"content": {
"type": "string"
}
}
}
},
"draft_id": {
"type": "string"
}
}
}{
"title": "Update a draft site",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}list_drafts
Lists every draft in the user's Scopeweb portfolio with status, preview URL and timestamps. For when the user asks about existing pages or wants to resume earlier work. Read-only. Cannot spend money.
{
"type": "object",
"properties": {}
}{
"type": "object",
"required": [
"drafts"
],
"properties": {
"drafts": {
"type": "array"
}
}
}{
"title": "List drafts (read-only)",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_draft
Returns a draft's metadata and file list, or a single file's content when path is given. For reading the current text of a draft, including one made in an earlier conversation. Read-only. Cannot spend money.
{
"type": "object",
"required": [
"draft_id"
],
"properties": {
"path": {
"type": "string",
"description": "Optional: return this file's content"
},
"draft_id": {
"type": "string"
}
}
}{
"title": "Open a draft (read-only)",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}verify_ownership
Proves the user controls a domain with a DNS TXT challenge. action 'start' returns the TXT record to publish; action 'check' looks for it. For when the user says a domain is theirs and the claim matters. A verified domain joins the user's inventory. A failed DNS lookup returns an error, never 'not owned'. Cannot spend money.
{
"type": "object",
"required": [
"domain"
],
"properties": {
"action": {
"enum": [
"start",
"check"
],
"type": "string",
"description": "Defaults to 'start'."
},
"domain": {
"type": "string"
}
}
}{
"title": "Prove you own a domain",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}list_domains
Lists the user's domain inventory: every domain with a verification challenge issued or completed, with cached liveness, classification, title and expiry. For portfolio, renewal and 'what do I own' questions. Each entry carries scan_age_ms, so a stale verdict reads as stale. Read-only. Cannot spend money.
{
"type": "object",
"properties": {}
}{
"type": "object",
"required": [
"domains"
],
"properties": {
"domains": {
"type": "array"
},
"verified_count": {
"type": "integer"
},
"unverified_count": {
"type": "integer"
}
}
}{
"title": "List your domains (read-only)",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}suggest_names
Generates candidate names across a namespace from a concept (a word or short phrase) and classifies each by what the registry says: unregistered, registered, pending or unprobed. For when the user is choosing or inventing a name and wants options to look at. Pending and unprobed are never registration claims. Returns a scan_id; passing it back walks deeper into the same namespace, converging over about 3 calls. Read-only. Cannot spend money. Unregistered does not mean purchasable: reserved and premium names answer the registry the same way. Only a registrar quote settles a price. PRICES ARE IDENTICAL FOR ALL BUYERS REGARDLESS OF BUDGET. A budget changes which candidates are recommended and how they are ordered; it never changes what anything costs.
{
"type": "object",
"properties": {
"tlds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Defaults to com/io/ai/app/dev/co."
},
"limit": {
"type": "number",
"description": "Candidates per page, max 50 (default 25)"
},
"query": {
"type": "string",
"description": "A word, name or idea, e.g. 'stowed'"
},
"offset": {
"type": "number",
"description": "Walk deeper into the expansion"
},
"scan_id": {
"type": "string",
"description": "Resume a previous browse; replaces query/tlds"
}
}
}{
"type": "object",
"required": [
"results",
"query",
"scan_id"
],
"properties": {
"query": {
"type": "string"
},
"results": {
"type": "array",
"description": "Candidate names with availability where known."
},
"scan_id": {
"type": "string",
"description": "Re-query this to walk deeper into the namespace."
},
"unprobed": {
"type": "integer",
"description": "Candidates whose availability was NOT checked. Never read as free."
}
}
}{
"title": "Explore names (read-only)",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}recommend_name
Runs the whole naming job on the server and returns one recommended domain with its real price and a confirm_url, plus runners-up. From a concept it generates candidates, grades the unregistered ones on measurable properties with a trademark signal, re-checks the best against the registry live, and prices them in order until one quotes. For when the user wants a name picked rather than a list, for example 'what should we call this?'. The answer shows the count at every step, why the pick won, its trademark signal with the caveat, and any name refused along the way with the reason. The confirm_url is not a purchase: a person opens it and pays on scopeweb.io. Cannot spend money.
{
"type": "object",
"required": [
"concept"
],
"properties": {
"tlds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Endings to search. Defaults to com/io/ai/app/dev/co."
},
"concept": {
"type": "string",
"description": "What is being named, as a word or short phrase, e.g. 'calm inbox'."
},
"project_id": {
"type": "string",
"description": "Optional project for budget context on the quote."
},
"budget_cents": {
"type": "number",
"description": "Optional ceiling that reorders candidates; it never changes a price."
}
}
}{
"type": "object",
"required": [
"concept",
"recommendation",
"runners_up",
"steps"
],
"properties": {
"steps": {
"type": "object",
"description": "How many names each step saw."
},
"reason": {
"type": "string"
},
"concept": {
"type": "string"
},
"runners_up": {
"type": "array"
},
"spends_money": {
"type": "boolean"
},
"recommendation": {
"type": [
"object",
"null"
],
"description": "The pick with price and confirm_url, or null with a reason."
},
"refused_on_the_way": {
"type": "array"
}
}
}{
"title": "Recommend a name (read-only)",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}score_name
Grades candidate names on measurable properties of the string: length, syllables, pronounceability (the radio test), presence in a published English word list, edit distance to major brands, hyphens and digits, and TLD perception. For when the user is choosing between names or asks whether one is any good. It does not check availability. Every component returns its score, weight and basis so the number can be audited; severe properties cap the total instead of being averaged away. Not a search-ranking prediction, and brand_collision is string similarity, not legal clearance. Each of the top 5 results carries a trademark field: close live US and EU registrations and applications, with office, classes, owner and a required caveat. It is a signal, never a clearance, and measured: false means nothing was searched. Components that cannot be measured are returned as unavailable with reasons, never estimated. Read-only. Cannot spend money.
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "A single domain, e.g. 'forge.com'"
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Up to 10 domains; returned ranked best-first"
}
}
}{
"type": "object",
"required": [
"results"
],
"properties": {
"results": {
"type": "array",
"description": "Scored names, highest first, each showing its working."
},
"score_version": {
"type": "integer"
}
}
}{
"title": "Grade a name (read-only)",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}scan_namespace
Classifies an explicit list of up to 25 domains: registered, resolves, serves, parked, classification and liveness for each. For when the user already has specific names rather than a concept. Read-only. Cannot spend money.
{
"type": "object",
"required": [
"candidates"
],
"properties": {
"candidates": {
"type": "array",
"items": {
"type": "string"
},
"description": "Full domain names, max 25."
}
}
}{
"title": "Classify names (read-only)",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}check_live
Checks up to 10 domains against the registry in real time (RDAP) and reports whether each is registered right now. For confirming availability just before a recommendation or purchase decision, and for any name an earlier answer marked 'unknown', 'pending' or 'unprobed', which are never registration claims. It answers whether a registration exists, not whether the name can be bought or at what price: reserved and premium names also read as unregistered here. It does not judge whether a name is good, and it does not fetch the site, so it reports 'registered' rather than 'active' or 'dormant'. Read-only. Cannot spend money.
{
"type": "object",
"required": [
"domains"
],
"properties": {
"domains": {
"type": "array",
"items": {
"type": "string"
}
}
}
}{
"type": "object",
"required": [
"results"
],
"properties": {
"results": {
"type": "array",
"description": "One row per domain asked about, with its verdict and evidence grade."
}
}
}{
"title": "Check availability (read-only)",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}audit_domain
Fetches a live domain's observable surface: HTTP status, redirect target, title, meta description, h1 headings and tech hints. For when the user asks what is wrong with a site they own, what is deployed at a domain, or whether it serves anything at all. Read-only. Cannot spend money.
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string"
}
}
}{
"title": "Inspect a live site (read-only)",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}set_budget
Records a monthly or yearly spending ceiling, in cents, for one of the user's projects by project_id. For when the user states a spending limit. It never authorises a purchase and cannot spend money. The response includes the project's current carry and headroom. Headroom is flagged partial when a domain's renewal price is unknown: an unknown renewal is counted as unknown, never as zero, so headroom is then an upper bound. PRICES ARE IDENTICAL FOR ALL BUYERS REGARDLESS OF BUDGET. A budget changes what is recommended and how results are ordered; it never changes what anything costs.
{
"type": "object",
"required": [
"project_id",
"period",
"amount_cents"
],
"properties": {
"period": {
"enum": [
"monthly",
"yearly"
],
"type": "string"
},
"project_id": {
"type": "string"
},
"amount_cents": {
"type": "integer"
}
}
}{
"title": "Set a project budget",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_finance
The financial readout for one project: the budget, per-domain renewal costs, total known carry, how many domains have unknown renewal costs, and remaining headroom. For questions about what a project costs to hold or how much budget is left. Domains held at another registrar renew at that registrar's prices, which are not visible here, so their cost is reported as unknown with reason foreign_registrar_pricing, never guessed and never zero. A transfer-in price, when shown, is not their renewal price. When partial is true, headroom is an upper bound. Read-only. Cannot spend money.
{
"type": "object",
"required": [
"project_id"
],
"properties": {
"project_id": {
"type": "string"
}
}
}{
"title": "Read project finances (read-only)",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_projects
Lists the projects this account owns or operates through an entity, with each project_id and how many domains and drafts each holds, plus a count of verified domains not filed in any project. For when the user refers to a project, or wants a budget or finance readout, and its project_id is not known yet. Read-only. Cannot spend money.
{
"type": "object",
"properties": {}
}{
"title": "List my projects (read-only)",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}create_project
Creates a named project owned by this account and returns its project_id. For when the user starts something new and wants a budget or its costs tracked. Cannot spend money.
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "What the project is called, e.g. 'Calm inbox app'"
}
}
}{
"title": "Create a project",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}kb_search
Semantic search over a small curated corpus: Scopeweb's own documentation and methodology, ICANN policy, and per-registry policy documents. Returns passages with the source, its URL, and what that source may be cited for. For explaining how something works. It is retrieval, not authority: a vector search always returns its nearest neighbour, so a returned passage is not evidence that it answers the question. Per-registry policy fields and current registration status have their own sources, which take precedence over a passage here. Read-only. Cannot spend money.
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string"
},
"top_k": {
"type": "integer"
}
}
}{
"type": "object",
"required": [
"query",
"passages"
],
"properties": {
"query": {
"type": "string"
},
"model_v": {
"type": "string"
},
"passages": {
"type": "array"
},
"not_a_claim_about": {
"type": "array"
}
}
}{
"title": "Search the knowledge base (read-only)",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}show_plans
Shows the available plans with what each includes, plus the caller's current tier and any allowance used. For when the user asks what a tier costs or has reached a limit. Read-only: it displays pricing and cannot start, change or cancel a subscription. Plans change depth, never truth: the registration verdict, its rdap_source and a domain's price are identical on every tier, and the response lists exactly what does not vary.
{
"type": "object",
"properties": {}
}{
"type": "object",
"required": [
"plans"
],
"properties": {
"law": {
"type": "string"
},
"plans": {
"type": "array"
},
"your_plan": {
"type": "object"
}
}
}{
"title": "Show plans (read-only)",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}quote_domain
Prices a name believed to be unregistered and returns total_cents, renewal_cents, an expiry and a confirm_url. For when the user has chosen a name and wants the real price. It re-runs the registry check first: a registered name, or one whose status cannot be confirmed, is not quoted. Premium names are quoted at their real price or refused, never at the base rate. An expired quote is re-quoted, never honoured. The confirm_url is not a purchase: it opens a page where a person types the domain to authorise the charge, and no tool in this server completes an order. Cannot spend money. PRICES ARE IDENTICAL FOR ALL BUYERS REGARDLESS OF BUDGET: passing a project_id adds budget context (does it fit, what is left after) and never changes the number.
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "The name to price, e.g. 'stoff.fit'."
},
"project_id": {
"type": "string",
"description": "Optional. Adds budget CONTEXT to the answer (does it fit, what is left after). It never changes the price."
}
}
}{
"type": "object",
"required": [
"domain",
"quotable"
],
"properties": {
"domain": {
"type": "string"
},
"message": {
"type": "string"
},
"contract": {
"type": "string",
"description": "Who may spend. An agent may not."
},
"quotable": {
"type": "boolean",
"description": "False means we will not sell it; read message and what_to_do."
},
"quote_id": {
"type": "string"
},
"what_to_do": {
"type": "string"
},
"confirm_url": {
"type": "string",
"description": "A page where a HUMAN completes the purchase. Not a purchase."
},
"quote_expires_at": {
"type": "integer"
},
"annual_commitment_cents": {
"type": "integer",
"description": "What it costs to KEEP, every year."
}
}
}{
"title": "Check a price (read-only)",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}Prompts
3 advertised
name_my_project — Help me name something
Get one recommended domain for an idea, checked live and priced, with runners-up and the reasons behind the pick.
- concept
- What the thing is, in a sentence or two. (required)
- endings
- Optional preferred endings, e.g. 'com, io, dev'.
vet_a_name — Is this name any good, and can I have it
Assess one domain name you already have in mind: its measurable properties, then whether it is actually available.
- domain
- The name to assess, e.g. 'stoff.fit'. (required)
what_will_this_cost — What does this name really cost
Price a specific domain including the renewal, not just the first year, and surface the traps before anyone commits.
- domain
- The name to price, e.g. 'stoff.fit'. (required)
Resources
4 advertised
How to read a Scopeweb answer — Interpretation rules
The evidence-grading rules every answer is governed by. The two that matter most: 'unknown', 'pending' and 'unprobed' are NEVER registration claims, and even 'unregistered' does not mean purchasable. Read this before acting on any availability verdict.
scopeweb://rules/interpretationWhat Scopeweb will and will not claim — Claims and refusals
The published claims, and the things this service refuses to produce at all (an appraisal is the main one). Useful when deciding whether an answer you want exists here in principle.
scopeweb://factsWholesale pricing for every supported ending — TLD pricing table
735 endings with first-year, renewal, transfer and redemption cost, plus whether WHOIS privacy is sold at all. This is where the traps are: endings that renew far above what they register for, endings with no privacy, and a two-year minimum term that makes first_year_cents null rather than computed. Large (about 335 KiB) -- for one ending, call quote_domain instead.
scopeweb://pricing/tldsThe tool and endpoint specification — API specification
The single source this server's tool list is generated from, including every rate-limit ceiling and refusal shape. Read it to see what a tool can answer before calling it.
scopeweb://spec90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
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
- 606 ms
- 95th percentile latency
- 606 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 606 ms · metadata changed · refuses unauthenticated resources/templates/list (HTTP 401)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http scopeweb-mcp https://mcp.scopeweb.io/mcpCodex
codex mcp add scopeweb-mcp --url https://mcp.scopeweb.io/mcpCursor
{
"mcpServers": {
"scopeweb-mcp": {
"url": "https://mcp.scopeweb.io/mcp"
}
}
}Cline
{
"mcpServers": {
"scopeweb-mcp": {
"type": "streamableHttp",
"url": "https://mcp.scopeweb.io/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"scopeweb-mcp": {
"type": "http",
"url": "https://mcp.scopeweb.io/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http scopeweb-mcp https://mcp.scopeweb.io/mcpClaude Desktop
https://mcp.scopeweb.io/mcpWindsurf
{
"mcpServers": {
"scopeweb-mcp": {
"serverUrl": "https://mcp.scopeweb.io/mcp"
}
}
}Let your agent find its tools
Find servers like Scopeweb MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other developer tools servers
Do you run Scopeweb MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.