Spaicely
Server Details
Host static websites on your own domain in the EU: domains, DNS, deploys, forms, shop and mail.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 3 tools
Each tool targets a distinct resource and action: blocks.list enumerates the catalog, blocks.get fetches one block's files and snippet, and domains.search checks domain availability. There is no plausible way to confuse them, and the get/list pairing is explicitly clarified in the descriptions.
All three names follow the same namespace.verb pattern (blocks.get, blocks.list, domains.search), which is predictable and readable. The verb choice (get vs list vs search) matches the semantics of each operation.
Three tools is borderline thin for a site-building service, and the descriptions reference operations (sites.deploy) that are not present in this surface. Each of the three earns its place, but the set feels like a fragment of a larger API rather than a self-contained server.
Blocks are covered read-only (list + get), which is plausible for a catalog, and domain search covers discovery well including verification. However there are notable gaps: no tool to actually deploy files or create/update a site, and no registration/transfer tool, with those steps deferred to external URLs and an unlisted sites.deploy.
Available Tools
3 toolsblocks.getGet a building blockARead-onlyIdempotentInspect
Gives one building block from blocks.list: its files, the HTML snippet to put in the pages, and notes on using it. Copy the files into the site by passing deploy_files along in sites.deploy (each is { path, source_url }; Spaicely fetches them, so you do not retype the code), then put the snippet in every page that needs it, with its texts in the language of the page. Without version you get the newest; a version never changes. Needs no account.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The block's name from blocks.list, such as consent | |
| version | No | A version; default the newest |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new behavior: "Needs no account" (auth requirement), "a version never changes" (immutability), and the newest-by-default resolution rule, plus the note that Spaicely fetches files so code need not be retyped.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what the tool returns, then the workflow, then the parameter behavior. Every sentence carries information, though the deploy/snippet workflow instruction is somewhat tangential to a read tool and lengthens the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe returns — it does, listing files, the HTML snippet, and usage notes, and it gives the shape of the deploy_files entries. Minor gaps remain (structure of the notes or file list), but an agent can call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description still contributes meaning beyond the schema by stating that omitted version yields the newest and that a pinned version is immutable — the latter is not in the schema and affects whether an agent should pin.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Gives one building block from blocks.list" names a specific verb and resource and explicitly anchors it to the sibling tool that enumerates blocks. The follow-on sentence enumerates the payload (files, HTML snippet, notes), so an agent knows exactly what it gets back versus calling blocks.list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly routes the agent: get names from blocks.list, then use the result with sites.deploy via deploy_files. That is concrete downstream usage context, though there is no explicit "when not to use" or edge-case exclusion beyond the version default note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blocks.listList building blocks for a siteARead-onlyIdempotentInspect
Lists ready-made building blocks for a site on Spaicely: a cookie notice that holds back analytics until the visitor agrees, forms that send to Spaicely without leaving the page, videos and maps that load only after a click, a mobile menu, an FAQ with structured data, a language switch, opening hours that say whether the place is open now, a progress bar for a donation form and a cart for the shop. Prefer a block to writing the same thing yourself. blocks.get gives a block's files, the HTML snippet for the pages and notes. Needs no account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, closed-world and non-destructive, so the safety profile is covered. The description adds value the annotations cannot: "Needs no account," which tells the agent no auth setup is required before calling, plus the fact that blocks are self-contained functionality (cookie gating, click-to-load media). It does not say what identifying field the list returns to feed into blocks.get.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and resource, then value, then the alternative. The middle catalogue sentence is long but each example conveys a capability an agent might otherwise reimplement, so it earns most of its length; a slightly tighter enumeration would read better.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description carries the burden of describing what comes back, and it does so at the level of block types. The one real gap is that it never states the shape of each entry (name/slug/id) that the agent needs in order to call blocks.get afterwards.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to disambiguate and the baseline is 4. The description correctly spends no space on inputs and instead describes output content.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Lists") and resource ("ready-made building blocks for a site") and immediately enumerates concrete block types, so the agent knows exactly what corpus this returns. It is clearly distinguishable from blocks.get, which is described as retrieving a single block's files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit preference rule ("Prefer a block to writing the same thing yourself") and routes to the sibling that follows this one: "blocks.get gives a block's files, the HTML snippet for the pages and notes." It stops short of a full when-not-to-use statement or a stated call order (list first, then get), so it is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domains.searchCheck which domain names are freeARead-onlyIdempotentInspect
Checks whether domain names are free to register. Pass full domains (bakkerijjansen.nl) and/or bare names (bakkerijjansen); a bare name is tried with every extension in extensions, or by default with the ones people ask for most: nl, com, eu, be, de, net, org, shop, online, site, store, tech, app, dev, io, ai, co.uk, uk, fr, at, ch, it, es, nu, se, co, me, info, biz, xyz, cloud. We sell 718 extensions in all (.amsterdam, .restaurant, .photography and so on); pass them in extensions when they fit the name. At most 50 domains per call. The first check is quick and asks DNS only: taken means the domain has nameservers (certain); likely_available means it has none, so it is probably free (reason dns_only, or no_rdap where the registry has no RDAP and verifying adds nothing). Once the person has favourites, call again with verify: true for the dns_only ones (at most 10 domains): that asks our registrar (or else the registry over RDAP) and turns them into available or taken; otherwise reason says why (rdap_rate_limited, rdap_unavailable). A premium name (premium: true) costs what its registry asks: price is our price for it in euro cents before VAT, often far above the usual price, so tell the person. unknown means no answer at all. Each free domain has a register_url: a page where the person signs in and registers it in their own name. Registration itself checks again. Each taken domain has a transfer_url: if the domain is the person's own, they move it to Spaicely there.
| Name | Required | Description | Default |
|---|---|---|---|
| names | Yes | Domains or bare names, such as bakkerijjansen.nl or bakkerijjansen | |
| verify | No | Deep check for a shortlist: also ask the registries. At most 10 domains. | |
| extensions | No | Extensions to try bare names with, such as nl, com, eu. Default: the ones people ask for most. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, and the description still adds substantial behaviour: DNS-only semantics for taken vs likely_available, the reasons emitted (dns_only, no_rdap, rdap_rate_limited, rdap_unavailable), premium pricing in euro cents before VAT, and where register_url/transfer_url lead. It does not describe latency or how rate limits are enforced, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the input formats are front-loaded, and every sentence carries operational detail. It is a dense single paragraph, though, and the 31-item default extension list is bulky enough to make the middle hard to scan; bullet-like separation would improve it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden and discharges it: it defines each status value, each reason code, the premium price units, and the meaning of register_url and transfer_url. An agent could interpret every field of the response without further help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3, but the description goes well beyond it: it explains that bare names are expanded across `extensions`, enumerates the default extension set, and clarifies that `verify` costs more, is capped at 10 domains, and converts dns_only into available/taken. That is real semantic enrichment, not restatement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: 'Checks whether domain names are free to register.' The scope (bulk lookups across extensions) is unambiguous, and no sibling tool (blocks.get/blocks.list) overlaps, so an agent can select it immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes a two-phase workflow: run the cheap DNS-only check first, then 'Once the person has favourites, call again with verify: true' for the dns_only results. It also states when to supply `extensions` ('pass them in `extensions` when they fit the name') and the 50-domain cap, leaving no inference needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- First observed
blocks.get - First observed
blocks.list - First observed
domains.search
Related MCP Connectors
EU web hosting for sites built in chat: publish, own domains, mail, a Postgres database, Node apps.
Deploy static sites on Hostsmith - give it a file, get a live HTTPS URL. EU/US residency.
Static hosting in Russia: sites, deploys, domains with SSL, forms, gated access, analytics via MCP.
Run apps, managed Postgres, buckets, a registry and domains on a European cloud.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI to deploy static sites, search for available domains, and point domains to sites, all without spending money.126 npm3MIT
- FlicenseNot gradedqualityDmaintenanceEnables deploying static websites to a subdomain on demo.st, with tools for subdomain reservation, zip upload, and content management.-
- AlicenseAqualityBmaintenanceEnables AI agents to deploy static files and get live HTTPS URLs instantly, with support for custom domains and data residency.998 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to self-host static websites by creating projects, editing files, previewing drafts, and publishing versioned releases with custom domains and a web dashboard.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.