Skip to main content
Glama

Create client report

create_client_report

Build a shareable, agency-branded report for a client and return its link. You supply the sections and write the words yourself from data you have already pulled, in plain language the client will understand. Each section can hold headline numbers, text (with bold, italic, links and "- " lists), a table, and any blocks in any order: charts (bar, line, donut), images, callouts ("Win of the month"), checklists, quotes or testimonials, two or three columns, dividers, and an html block for anything else (cleaned to safe tags). The look comes from the agency's style (report_style), optionally this report's own style, or a saved template (report_templates, report_template_get). The report keeps the spec it was built from: update_client_report edits it later and keeps the link.

Input Schema

NameRequiredDescriptionDefault
styleNoThis report only, on top of the agency's and the client's style
titleNoe.g. 'SEO and ads — August 2026'
clientYesClient name from list_clients
sectionsYes
templateNoA saved template's name: its style applies (report_template_get shows its structure to follow)
period_labelYesHuman readable, e.g. '1–28 August 2026'

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / sections / items / properties / commentary / description
      Previous value: -"Everyday words the client would use. No jargon, no hedging. Formatting allowed."New value: +"The section's text, as the client will read it. Formatting allowed (**bold**, *italic*, links, \"- \" lists)."
  2. Changed1 schema field changed
    • changedInput schema / properties / template / description
      Previous value: -"A saved template's name: its style applies (report_template get shows its structure to follow)"New value: +"A saved template's name: its style applies (report_template_get shows its structure to follow)"
  3. Changed4 schema fields changed
    • addedInput schema / properties / sections / items / properties / blocks
      Added value: +{
      +  "description": "Anything else, in order: text, stats, table, chart, image, callout, checklist, quote, columns, divider, html",
      +  "items": {
      +    "anyOf": [
      +      {
      +        "anyOf": [
      +          {
      +            "properties": {
      +              "text": {
      +                "description": "**bold**, *italic*, [link](https://…), lines starting \"- \" or \"1. \" become lists",
      +                "type": "string"
      +              },
      +              "type": {
      +                "const": "text",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "type",
      +              "text"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "properties": {
      +              "items": {
      +                "items": {
      +                  "properties": {
      +                    "label": {
      +                      "type": "string"
      +                    },
      +                    "sub": {
      +                      "type": "string"
      +                    },
      +                    "value": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "label",
      +                    "value"
      +                  ],
      +                  "type": "object"
      +                },
      +                "type": "array"
      +              },
      +              "type": {
      +                "const": "stats",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "type",
      +              "items"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "properties": {
      +              "columns": {
      +                "items": {
      +                  "type": "string"
      +                },
      +                "type": "array"
      +              },
      +              "rows": {
      +                "items": {
      +                  "items": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "number"
      +                      }
      +                    ]
      +                  },
      +                  "type": "array"
      +                },
      +                "type": "array"
      +              },
      +              "type": {
      +                "const": "table",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "type",
      +              "columns",
      +              "rows"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "properties": {
      +              "kind": {
      +                "enum": [
      +                  "bar",
      +                  "line",
      +                  "donut"
      +                ],
      +                "type": "string"
      +              },
      +              "labels": {
      +                "items": {
      +                  "type": "string"
      +                },
      +                "maxItems": 36,
      +                "type": "array"
      +              },
      +              "series": {
      +                "items": {
      +                  "properties": {
      +                    "name": {
      +                      "type": "string"
      +                    },
      +                    "values": {
      +                      "items": {
      +                        "type": "number"
      +                      },
      +                      "type": "array"
      +                    }
      +                  },
      +                  "required": [
      +                    "values"
      +                  ],
      +                  "type": "object"
      +                },
      +                "maxItems": 6,
      +                "minItems": 1,
      +                "type": "array"
      +              },
      +              "title": {
      +                "type": "string"
      +              },
      +              "type": {
      +                "const": "chart",
      +                "type": "string"
      +              },
      +              "unit": {
      +                "maxLength": 8,
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "type",
      +              "kind",
      +              "labels",
      +              "series"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "properties": {
      +              "alt": {
      +                "type": "string"
      +              },
      +              "caption": {
      +                "type": "string"
      +              },
      +              "type": {
      +                "const": "image",
      +                "type": "string"
      +              },
      +              "url": {
      +                "pattern": "^https:\\/\\/",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "type",
      +              "url"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "properties": {
      +              "text": {
      +                "type": "string"
      +              },
      +              "title": {
      +                "type": "string"
      +              },
      +              "tone": {
      +                "enum": [
      +                  "win",
      +                  "info",
      +                  "warning"
      +                ],
      +                "type": "string"
      +              },
      +              "type": {
      +                "const": "callout",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "type",
      +              "text"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "properties": {
      +              "items": {
      +                "items": {
      +                  "properties": {
      +                    "done": {
      +                      "type": "boolean"
      +                    },
      +                    "text": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "text"
      +                  ],
      +                  "type": "object"
      +                },
      +                "type": "array"
      +              },
      +              "type": {
      +                "const": "checklist",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "type",
      +              "items"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "properties": {
      +              "author": {
      +                "type": "string"
      +              },
      +              "text": {
      +                "type": "string"
      +              },
      +              "type": {
      +                "const": "quote",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "type",
      +              "text"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "properties": {
      +              "html": {
      +                "description": "Cleaned to safe tags: no scripts, forms or frames; links https/mailto; images https",
      +                "maxLength": 60000,
      +                "type": "string"
      +              },
      +              "type": {
      +                "const": "html",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "type",
      +              "html"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "properties": {
      +              "type": {
      +                "const": "divider",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "type"
      +            ],
      +            "type": "object"
      +          }
      +        ]
      +      },
      +      {
      +        "properties": {
      +          "columns": {
      +            "items": {
      +              "items": {
      +                "anyOf": [
      +                  {
      +                    "properties": {
      +                      "text": {
      +                        "description": "**bold**, *italic*, [link](https://…), lines starting \"- \" or \"1. \" become lists",
      +                        "type": "string"
      +                      },
      +                      "type": {
      +                        "const": "text",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "type",
      +                      "text"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "properties": {
      +                      "items": {
      +                        "items": {
      +                          "properties": {
      +                            "label": {
      +                              "type": "string"
      +                            },
      +                            "sub": {
      +                              "type": "string"
      +                            },
      +                            "value": {
      +                              "type": "string"
      +                            }
      +                          },
      +                          "required": [
      +                            "label",
      +                            "value"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        "type": "array"
      +                      },
      +                      "type": {
      +                        "const": "stats",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "type",
      +                      "items"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "properties": {
      +                      "columns": {
      +                        "items": {
      +                          "type": "string"
      +                        },
      +                        "type": "array"
      +                      },
      +                      "rows": {
      +                        "items": {
      +                          "items": {
      +                            "anyOf": [
      +                              {
      +                                "type": "string"
      +                              },
      +                              {
      +                                "type": "number"
      +                              }
      +                            ]
      +                          },
      +                          "type": "array"
      +                        },
      +                        "type": "array"
      +                      },
      +                      "type": {
      +                        "const": "table",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "type",
      +                      "columns",
      +                      "rows"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "properties": {
      +                      "kind": {
      +                        "enum": [
      +                          "bar",
      +                          "line",
      +                          "donut"
      +                        ],
      +                        "type": "string"
      +                      },
      +                      "labels": {
      +                        "items": {
      +                          "type": "string"
      +                        },
      +                        "maxItems": 36,
      +                        "type": "array"
      +                      },
      +                      "series": {
      +                        "items": {
      +                          "properties": {
      +                            "name": {
      +                              "type": "string"
      +                            },
      +                            "values": {
      +                              "items": {
      +                                "type": "number"
      +                              },
      +                              "type": "array"
      +                            }
      +                          },
      +                          "required": [
      +                            "values"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        "maxItems": 6,
      +                        "minItems": 1,
      +                        "type": "array"
      +                      },
      +                      "title": {
      +                        "type": "string"
      +                      },
      +                      "type": {
      +                        "const": "chart",
      +                        "type": "string"
      +                      },
      +                      "unit": {
      +                        "maxLength": 8,
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "type",
      +                      "kind",
      +                      "labels",
      +                      "series"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "properties": {
      +                      "alt": {
      +                        "type": "string"
      +                      },
      +                      "caption": {
      +                        "type": "string"
      +                      },
      +                      "type": {
      +                        "const": "image",
      +                        "type": "string"
      +                      },
      +                      "url": {
      +                        "pattern": "^https:\\/\\/",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "type",
      +                      "url"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "properties": {
      +                      "text": {
      +                        "type": "string"
      +                      },
      +                      "title": {
      +                        "type": "string"
      +                      },
      +                      "tone": {
      +                        "enum": [
      +                          "win",
      +                          "info",
      +                          "warning"
      +                        ],
      +                        "type": "string"
      +                      },
      +                      "type": {
      +                        "const": "callout",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "type",
      +                      "text"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "properties": {
      +                      "items": {
      +                        "items": {
      +                          "properties": {
      +                            "done": {
      +                              "type": "boolean"
      +                            },
      +                            "text": {
      +                              "type": "string"
      +                            }
      +                          },
      +                          "required": [
      +                            "text"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        "type": "array"
      +                      },
      +                      "type": {
      +                        "const": "checklist",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "type",
      +                      "items"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "properties": {
      +                      "author": {
      +                        "type": "string"
      +                      },
      +                      "text": {
      +                        "type": "string"
      +                      },
      +                      "type": {
      +                        "const": "quote",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "type",
      +                      "text"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "properties": {
      +                      "html": {
      +                        "description": "Cleaned to safe tags: no scripts, forms or frames; links https/mailto; images https",
      +                        "maxLength": 60000,
      +                        "type": "string"
      +                      },
      +                      "type": {
      +                        "const": "html",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "type",
      +                      "html"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "properties": {
      +                      "type": {
      +                        "const": "divider",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "type"
      +                    ],
      +                    "type": "object"
      +                  }
      +                ]
      +              },
      +              "type": "array"
      +            },
      +            "maxItems": 3,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "type": {
      +            "const": "columns",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "type",
      +          "columns"
      +        ],
      +        "type": "object"
      +      }
      +    ]
      +  },
      +  "maxItems": 60,
      +  "type": "array"
      +}
    • changedInput schema / properties / sections / items / properties / commentary / description
      Previous value: -"Everyday words the client would use. No jargon, no hedging."New value: +"Everyday words the client would use. No jargon, no hedging. Formatting allowed."
    • addedInput schema / properties / style
      Added value: +{
      +  "description": "This report only, on top of the agency's and the client's style",
      +  "properties": {
      +    "accent_color": {
      +      "pattern": "^#[0-9a-fA-F]{3,8}$",
      +      "type": "string"
      +    },
      +    "agency_name": {
      +      "maxLength": 120,
      +      "type": "string"
      +    },
      +    "bg_color": {
      +      "description": "Page background",
      +      "pattern": "^#[0-9a-fA-F]{3,8}$",
      +      "type": "string"
      +    },
      +    "contact_email": {
      +      "maxLength": 200,
      +      "type": "string"
      +    },
      +    "corner": {
      +      "enum": [
      +        "rounded",
      +        "soft",
      +        "square"
      +      ],
      +      "type": "string"
      +    },
      +    "cover": {
      +      "description": "A cover page: logo, client, title, period, prepared by",
      +      "type": "boolean"
      +    },
      +    "cover_note": {
      +      "maxLength": 400,
      +      "type": "string"
      +    },
      +    "custom_css": {
      +      "description": "Any CSS for full control (classes: header, h1, h2, section, .stat, .chart, .callout, .quote, .checklist, .cover, table…). Cleaned: url(), @import and tags are removed.",
      +      "maxLength": 20000,
      +      "type": "string"
      +    },
      +    "density": {
      +      "enum": [
      +        "compact",
      +        "comfortable",
      +        "airy"
      +      ],
      +      "type": "string"
      +    },
      +    "font": {
      +      "enum": [
      +        "Inter",
      +        "Roboto",
      +        "Open Sans",
      +        "Lato",
      +        "Montserrat",
      +        "Poppins",
      +        "Source Sans 3",
      +        "DM Sans",
      +        "Work Sans",
      +        "Nunito",
      +        "Raleway",
      +        "IBM Plex Sans",
      +        "Space Grotesk",
      +        "Manrope",
      +        "Outfit",
      +        "Merriweather",
      +        "Lora",
      +        "Playfair Display",
      +        "Libre Baskerville",
      +        "Roboto Slab"
      +      ],
      +      "type": "string"
      +    },
      +    "footer_note": {
      +      "maxLength": 400,
      +      "type": "string"
      +    },
      +    "header_style": {
      +      "enum": [
      +        "bar",
      +        "minimal",
      +        "band"
      +      ],
      +      "type": "string"
      +    },
      +    "heading_font": {
      +      "enum": [
      +        "Inter",
      +        "Roboto",
      +        "Open Sans",
      +        "Lato",
      +        "Montserrat",
      +        "Poppins",
      +        "Source Sans 3",
      +        "DM Sans",
      +        "Work Sans",
      +        "Nunito",
      +        "Raleway",
      +        "IBM Plex Sans",
      +        "Space Grotesk",
      +        "Manrope",
      +        "Outfit",
      +        "Merriweather",
      +        "Lora",
      +        "Playfair Display",
      +        "Libre Baskerville",
      +        "Roboto Slab"
      +      ],
      +      "type": "string"
      +    },
      +    "logo_position": {
      +      "enum": [
      +        "left",
      +        "center",
      +        "right"
      +      ],
      +      "type": "string"
      +    },
      +    "logo_size": {
      +      "enum": [
      +        "small",
      +        "medium",
      +        "large"
      +      ],
      +      "type": "string"
      +    },
      +    "logo_url": {
      +      "description": "An https image link; otherwise the logo uploaded on the dashboard",
      +      "pattern": "^https:\\/\\/",
      +      "type": "string"
      +    },
      +    "secondary_color": {
      +      "description": "Second chart color and accents",
      +      "pattern": "^#[0-9a-fA-F]{3,8}$",
      +      "type": "string"
      +    },
      +    "text_color": {
      +      "pattern": "^#[0-9a-fA-F]{3,8}$",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / template
      Added value: +{
      +  "description": "A saved template's name: its style applies (report_template get shows its structure to follow)",
      +  "type": "string"
      +}
  4. Changed1 schema field changed
    • changedInput schema / properties / sections / items / properties / commentary / description
      Previous value: -"Plain English. No jargon, no hedging."New value: +"Everyday words the client would use. No jargon, no hedging."
  5. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare this is a non-readonly, non-idempotent, non-destructive open-world operation, so the safety profile is partly covered. The description adds genuinely useful behavior beyond that: the tool returns a shareable link, the report persists the spec it was built from, later edits via update_client_report preserve the link, and html content is sanitized to safe tags. It stops short of stating auth/permission needs or whether repeated calls create duplicate reports.

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?

Purpose and return value are front-loaded, then prerequisites, then styling. The block-type enumeration (bar/line/donut, callouts, checklists, quotes, columns, dividers, html) largely restates the schema's oneOf variants, adding some redundancy, though it usefully signals the breadth of what a section can hold.

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

Completeness4/5

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

For a complex nested-schema tool with no output schema, the description covers the missing pieces: it states the return is a link, explains the create/update lifecycle, and describes style precedence. It omits error/permission expectations and does not mention sourcing the client via list_clients, leaving that to the schema.

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 high (83%), so the baseline is 3, but the description adds a resolution hierarchy the schema does not spell out: styling comes from the agency style (report_style), optionally the report's own `style`, or a saved `template`. It also clarifies that sections are authored in client-facing plain language, adding intent beyond the raw schema fields.

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?

States a specific verb and resource ('Build a shareable, agency-branded report for a client') plus the return value ('return its link'), and explicitly routes the editing case away from this tool by naming update_client_report. An agent can distinguish create vs. update without opening either schema.

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?

Gives clear context: the agent must supply sections and author the copy itself 'from data you have already pulled,' implying data-collection tools run first, and points to report_style / report_templates / report_template_get for styling. It does not explicitly exclude or compare against closer siblings like create_prospect_report or client_report_send, which a 5 would require.

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.