Skip to main content
Glama

Add a widget

add_widget

Add a widget that is not just a URL: section headings, text, newsletter signup, contact form, services, offers, events, map, gallery, Q&A and more. Check list_widget_types for the props each type takes. Types: link (Link), text (Section heading), label (Text), image (Image), youtube (YouTube video), vimeo (Vimeo video), spotify (Spotify), soundcloud (SoundCloud), apple-music (Apple Music), deezer (Deezer), audio (Audio), gallery (Gallery), newsletter (Email signup), contact-form (Contact form), services (Services), offer-card (Product), event-card (Event), experience (Experience), goals-tracker (Goal tracking), qr-card (QR code), whatsapp (WhatsApp), telegram (Telegram), latest-posts (Latest posts), map (Map), github (GitHub), google-calendar (Google Calendar).

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "type": "<type>"
    },
    "name": "add_widget"
  }
}

Input Schema

NameRequiredDescriptionDefault
pageNoWhich page: "home" (the default) or a subpage slug from list_pages.
sizeNoTile size on the 8-column desktop grid: small 2×2 (quarter row), wide 4×2 (half row), tall 2×4, large 4×4, banner 8×2 (full row). Phones use a 4-column grid, so wide/large/banner fill the phone width.
typeYesWidget type from list_widget_types.
propsNoProps for this type (see list_widget_types). For text and section headings pass {"content": "…"}.
positionNoWhere it goes in reading order: "top", "bottom" (default), "after:<widget id>" or "before:<widget id>". "top" puts it right under the name and bio.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare the operation is a non-read-only, non-destructive, non-idempotent, open-world mutation, so the safety profile is covered. The description adds only implied creation semantics and nothing about the added widget's identifier being returned, whether duplicate additions stack, or any permission requirements — with position aliases like "after:<widget id>" this returned id actually matters.

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?

Front-loaded with the purpose, then the list_widget_types pointer, then the type table — a sensible order with no filler sentences. The opening preview ("section headings, text, newsletter signup…") partially duplicates the later type list, which is mild redundancy in an otherwise efficient definition.

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?

Five well-described parameters at full schema coverage, annotations covering the safety profile, and no output schema to explain, so the description only needs to cover intent and widget typing — both of which it does. An agent has enough to choose a type, supply props via list_widget_types, and place the widget.

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 coverage is 100%, so the baseline is 3, but the description adds real value beyond the schema: the schema's type parameter only says "from list_widget_types", while the description supplies the concrete enum and human-readable labels (link→Link, text→Section heading, newsletter→Email signup), letting an agent map user intent to a type without an extra call.

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

Purpose4/5

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

States a specific verb+resource (add a widget) and clarifies the scope beyond mere links by enumerating what a widget can be. It is distinguishable from create_page, update_widget and remove_widget, but it never resolves the overlap with the sibling add_link, which appears to be a special case of type=link.

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

Usage Guidelines3/5

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

It gives one useful routing instruction: check list_widget_types for the props each type takes. It does not say when to prefer add_link over add_widget with type=link, or when to follow up with move_widget/resize_widget/update_widget rather than creating a new widget, so the when-not guidance is absent.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources