Skip to main content
Glama

Server Details

AI agent website builder. Create and publish link-in-bio sites via MCP or REST API.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 38 days
Last Tested
Transport
Streamable HTTP · MCP 2025-03-26
URL
Repository
unulu-ai/unulu
GitHub Stars
2
Server Listing
unulu

TDQS

A4.5/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: check_handle verifies availability, create_site provisions a new site, get_state reads, and update_site mutates. The only minor overlap (update_site returns the full state like get_state) is explicitly framed as complementary, with update_site directing callers to get_state first.

Naming Consistency5/5

All four tools follow the same unulu_verb_noun snake_case pattern (check_handle, create_site, get_state, update_site). The noun varies with the resource each acts on, but the convention is uniform and predictable.

Tool Count4/5

Four tools is slightly lean for a site-management service, but each earns its place across the check/create/read/update lifecycle. Nothing is redundant, though the surface leaves little room for deletion or listing multiple sites.

Completeness4/5

Create, read, and update are fully covered, including the handle-availability pre-check and token-based auth for pre- and post-claim states. The notable gap is a delete/expire operation, which agents cannot perform directly.

Available Tools

4 tools
unulu_check_handleCheck handle availabilityA
Read-only
Inspect

Check whether a handle is available on unu.lu (not other platforms like Instagram, TikTok, etc.). For example, checking 'joe' tells you if joe.unu.lu is available for claiming. Use this to help users choose a handle before they visit the claim page.

ParametersJSON Schema
NameRequiredDescriptionDefault
handleYesThe handle to check (3-30 chars, alphanumeric + hyphens)

Output Schema

ParametersJSON Schema
NameRequiredDescription
handleYes
availableYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and destructiveHint=false, so the safe read-only nature is known. The description adds valuable context beyond annotations by specifying the domain (unu.lu), providing an example that demonstrates the mapping to a subdomain, and mentioning that it checks availability for claiming. No contradictions detected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each serving a distinct purpose: state the core function, give a concrete example, and provide usage context. It is front-loaded with the main action and contains no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and an output schema, the description fully covers what the tool does, how to use it, and why. The example and usage guidance make it complete. The output schema handles return details, so no further explanation is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents the handle parameter with constraints, achieving 100% coverage. The description adds semantic meaning by explaining that checking 'joe' tells you if joe.unu.lu is available, clarifying the domain format and the intent of the parameter beyond the schema's simple 'handle to check'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Check' and identifies the exact resource: handle availability on unu.lu. It distinguishes itself from siblings by explicitly noting 'not other platforms like Instagram, TikTok, etc.' and provides a concrete example ('joe' -> joe.unu.lu), making the purpose immediately clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states when to use the tool: 'Use this to help users choose a handle before they visit the claim page.' It also clarifies the scope, explicitly excluding other platforms, which prevents misuse. This is direct usage guidance without needing to reference sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unulu_create_siteCreate a link-in-bio siteAInspect

Create a link-in-bio site with a name, bio, and links. Returns a live URL on unu.lu that expires in 1 hour unless claimed. Do NOT call until you have at least a name and one link from the user — gather real content first, never create with placeholder or empty content. If the user provides a handle (e.g. '_guy.a' for Instagram), construct the full URL yourself — do not ask them to paste it. When feasible, offer to find all public links for the person. Before calling: tell the user they can choose a skin on the preview page for the overall aesthetic; ask permission before adding emoji leading_icons to decorate links (for not-well-known social URLs). The response includes an assistant_message with the site URL and claim details — present these to the user. Persist claim_token and claim_code_short for subsequent updates — never ask the user for them back in the same conversation. Never create a duplicate site; always update the existing one. After creation: tell the user they can pick a custom handle when they claim; share the preview URL in a copy-paste block; offer to refine bio, links, or ordering. Keep iteration fast — apply changes immediately, don't re-confirm minor edits.

ParametersJSON Schema
NameRequiredDescriptionDefault
bioNoShort bio in first person, 1–3 sentences, capturing what's distinctive — no filler phrases like 'passionate about' or 'dedicated to'. If you lack context, write something short and honest rather than generic. Supports markdown.
nameYesDisplay name / heading for the site
linksNoLink-in-bio links. Order matters — place the most important link first. Well-known social links display branded icons automatically — omit leading_icon for these.
skin_idNoOptional theme skin. When omitted, the live site includes a visual theme chooser — prefer omitting so the user can pick their own.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYesLive URL on unu.lu — always present as a clickable markdown link when showing to the user
site_idYesUnique site identifier
expires_atYesISO 8601 expiry timestamp (~1 hour from creation)
claim_tokenNoHMAC token for updating ephemeral (pre-claim) sites via updateSite. Present when the site is unclaimed.
claim_code_shortNoBackup code (XXXX-XXXX) for claiming the site via the short-code flow
assistant_messageYesPre-formatted message with the live site link, expiry notice, and short-code claim instructions. Share with the user as-is — do not paraphrase or restructure.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, discloses expiration behavior (expires in 1 hour unless claimed), response contents (assistant_message with URL and claim details), token persistence requirements (persist claim_token and claim_code_short), and duplicate handling (always update existing). No contradiction with annotations; openWorldHint aligns with the live URL behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but packed with actionable guidance; front-loads the core action ('Create a link-in-bio site...') and then provides ordered pre- and post-steps. Slightly verbose, but every instruction serves a purpose and is structured logically.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Comprehensive coverage of preconditions, creation flow, follow-up actions, and state persistence. With an output schema present and detailed annotations, this description fully equips the agent to execute correctly without requiring external knowledge.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already describes all parameters (100% coverage), but description adds important usage semantics: how to construct URLs from handles, when to omit leading_icon for well-known social links, and permission requirement for emoji icons. This goes beyond the schema's technical descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Create a link-in-bio site with a name, bio, and links' and specifies the unique output (live URL on unu.lu expiring in 1 hour). Distinguishes from siblings by noting duplicate-avoidance via updating existing sites.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit preconditions ('Do NOT call until you have at least a name and one link'), alternatives (construct full URL yourself vs asking user), and workflow (offer to find links, ask permission for icons). Also states 'Never create a duplicate site; always update the existing one', implying when to use the update path instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unulu_get_stateGet site stateA
Read-only
Inspect

Returns the current state of a site including its name, bio, links, and URL. No authentication required. If expires_at is absent, the site has been claimed and is permanent. Accepts a site ID, a full URL (e.g. https://abc123.unu.lu), or a bare hostname (e.g. abc123.unu.lu).

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idYesSite ID, full URL (e.g. https://abc123.unu.lu), or bare hostname (e.g. abc123.unu.lu)

Output Schema

ParametersJSON Schema
NameRequiredDescription
bioNo
urlYes
nameYes
linksYes
site_idYes
skin_idNo
expires_atNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable context: 'No authentication required' and the expires_at semantics for claimed vs. permanent sites, going beyond structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core function, followed by essential details. Every sentence earns its place with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description need not explain return values. It covers input flexibility, authentication, and the expires_at behavioral nuance, making it complete for a simple read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and already describes the site_id formats. The description repeats these formats without adding additional semantic meaning beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Returns') and resource ('current state of a site'), listing key fields and input formats. It clearly distinguishes from siblings (create/update/check_handle) as a read-only retrieval tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context: retrieving site state with flexible input forms and no auth. It doesn't explicitly name alternatives or exclusions, but the read vs. write distinction is clear from sibling names and the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unulu_update_siteUpdate a siteA
Destructive
Inspect

Update an existing site. All fields are optional — only provided fields are changed. Links replace the entire array (omit to keep existing). Before updating, always call unulu_get_state first to read the current links and their ids — do not guess link ids. Authorization depends on site lifecycle: X-Claim-Token header for ephemeral (pre-claim) sites, X-Edit-Token header for claimed (post-claim) sites. If neither token is available and the site is claimed, use requestEditAccess to obtain an edit_token. If you created the site in this conversation, you already have the claim_token — use it directly. Returns the full updated site state. Keep iteration fast — apply changes immediately without re-confirming minor edits unless ambiguous. Accepts a site ID, a full URL (e.g. https://abc123.unu.lu), or a bare hostname (e.g. abc123.unu.lu).

ParametersJSON Schema
NameRequiredDescriptionDefault
bioNoShort bio in first person, 1–3 sentences, capturing what's distinctive — no filler phrases like 'passionate about' or 'dedicated to'. If you lack context, write something short and honest rather than generic. Supports markdown.
nameNoDisplay name / heading for the site
linksNoReplaces all links — omit to keep existing links unchanged. Order matters — place the most important link first. Well-known social links display branded icons automatically — omit leading_icon for these.
site_idYesSite ID, full URL (e.g. https://abc123.unu.lu), or bare hostname (e.g. abc123.unu.lu)
skin_idNoOptional theme skin. When omitted, the live site includes a visual theme chooser — prefer omitting so the user can pick their own.
claim_urlNoLegacy parameter — accepts a full Claim URL from older create-site responses. The server extracts the claim_token automatically. Prefer claim_token directly.
edit_tokenNoJWT token for claimed sites (alternative to X-Edit-Token header)
claim_tokenNoHMAC token for ephemeral sites (alternative to X-Claim-Token header)

Output Schema

ParametersJSON Schema
NameRequiredDescription
bioNo
urlYes
nameYes
linksYes
site_idYes
skin_idNo
expires_atNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key behaviors beyond annotations: partial update semantics ('only provided fields are changed'), the destructive nature of links replacement ('Links replace the entire array'), authorization requirements, and return value (full updated site state). It complements the annotations without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized and front-loaded with the core purpose. Each sentence adds operational value (preconditions, auth, replacement behavior, iteration guidance) without unnecessary filler. It is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers all essential operational aspects: purpose, prerequisites, authorization, destructive details, return value, and identifier formats. With an output schema present, it doesn't need to explain return structure. It is complete for a complex update tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds some useful context (e.g., site_id accepts URL/hostname, token alternatives), but largely reiterates schema descriptions. The mention of 'link ids' is not reflected in the schema's link item properties, which creates slight ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: 'Update an existing site.' It distinguishes from sibling tools (unulu_create_site, unulu_get_state, unulu_check_handle) by focusing on modification and providing update-specific guidance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use instructions, including always calling unulu_get_state first to avoid guessing link ids, and details the authorization workflow depending on lifecycle (X-Claim-Token vs X-Edit-Token), with a clear fallback to requestEditAccess. This is strong practical guidance.

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.

  1. 1 tool update
    • Changedunulu_create_site1 field changed
      • changedOutput schema / properties / expires_at / description
        Previous value: -"ISO 8601 expiry timestamp (~3 hours from creation)"New value: +"ISO 8601 expiry timestamp (~1 hour from creation)"
  2. 3 tool updates
    • Removedunulu_delete_site
    • Removedunulu_freeze_site
    • Removedunulu_unfreeze_site
  3. 7 tool updates
    • First observedunulu_check_handle
    • First observedunulu_create_site
    • First observedunulu_delete_site
    • First observedunulu_freeze_site
    • First observedunulu_get_state
    • First observedunulu_unfreeze_site
    • First observedunulu_update_site

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.