unulu
Server Details
AI agent website builder. Create and publish link-in-bio sites via MCP or REST API.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- unulu-ai/unulu
- GitHub Stars
- 2
- Server Listing
- unulu
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.6/5 across 4 of 4 tools scored.
Each tool has a distinct purpose with no overlap: check_handle verifies availability, create_site builds a new site, get_state retrieves current site data, and update_site modifies an existing site. The descriptions clearly differentiate their functions, preventing agent misselection.
All tools follow a consistent 'unulu_verb_noun' pattern (e.g., unulu_check_handle, unulu_create_site). This uniformity makes the tool set predictable and easy for agents to understand and navigate.
With 4 tools, this server is well-scoped for handling link-in-bio sites on unu.lu. It covers the essential lifecycle: checking availability, creating, reading, and updating sites, which is appropriate for its focused domain without being overly sparse or bloated.
The tool set provides strong coverage for the core site lifecycle (check, create, read, update), but lacks a delete tool for removing sites. This minor gap can be worked around by agents, as the domain is otherwise well-covered with no dead ends in typical workflows.
Available Tools
4 toolsunulu_check_handleCheck handle availabilityARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | The handle to check (3-30 chars, alphanumeric + hyphens) |
Output Schema
| Name | Required | Description |
|---|---|---|
| handle | Yes | |
| available | Yes |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| bio | No | Short 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. | |
| name | Yes | Display name / heading for the site | |
| links | No | Link-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_id | No | Optional theme skin. When omitted, the live site includes a visual theme chooser — prefer omitting so the user can pick their own. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | Live URL on unu.lu — always present as a clickable markdown link when showing to the user |
| site_id | Yes | Unique site identifier |
| expires_at | Yes | ISO 8601 expiry timestamp (~1 hour from creation) |
| claim_token | No | HMAC token for updating ephemeral (pre-claim) sites via updateSite. Present when the site is unclaimed. |
| claim_code_short | No | Backup code (XXXX-XXXX) for claiming the site via the short-code flow |
| assistant_message | Yes | Pre-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. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 stateARead-onlyInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | Yes | Site ID, full URL (e.g. https://abc123.unu.lu), or bare hostname (e.g. abc123.unu.lu) |
Output Schema
| Name | Required | Description |
|---|---|---|
| bio | No | |
| url | Yes | |
| name | Yes | |
| links | Yes | |
| site_id | Yes | |
| skin_id | No | |
| expires_at | No |
Tool Definition Quality
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.
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.
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.
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.
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.
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 siteADestructiveInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| bio | No | Short 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. | |
| name | No | Display name / heading for the site | |
| links | No | Replaces 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_id | Yes | Site ID, full URL (e.g. https://abc123.unu.lu), or bare hostname (e.g. abc123.unu.lu) | |
| skin_id | No | Optional theme skin. When omitted, the live site includes a visual theme chooser — prefer omitting so the user can pick their own. | |
| claim_url | No | Legacy parameter — accepts a full Claim URL from older create-site responses. The server extracts the claim_token automatically. Prefer claim_token directly. | |
| edit_token | No | JWT token for claimed sites (alternative to X-Edit-Token header) | |
| claim_token | No | HMAC token for ephemeral sites (alternative to X-Claim-Token header) |
Output Schema
| Name | Required | Description |
|---|---|---|
| bio | No | |
| url | Yes | |
| name | Yes | |
| links | Yes | |
| site_id | Yes | |
| skin_id | No | |
| expires_at | No |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
Hey fellow Glama users. Give this a try and claim your free link-in-bio page on unu.lu. Let me know how it goes. Warm regards, Guy
Related MCP Servers
- AlicenseAqualityDmaintenanceGenerate styled QR codes, manage dynamic short links with click analytics, and publish micro-landing pages via AI agents.19541MIT
- AlicenseAqualityBmaintenanceEnables AI agents to build, edit, and publish live websites with hosting, database, auth, and domains via the Model Context Protocol.13121MIT
- AlicenseAqualityAmaintenanceSimple and free publishing of content on the web for AI Agents27,772MIT
- Alicense-qualityCmaintenanceEnables AI agents to create and manage owned-audience websites with posts, products, subscribers, domains, and analytics.177MIT
Your Connectors
Sign in to create a connector for this server.