Skip to main content
Glama

Update company

companies_update

Change a company's name, status or branding. theme is merged field by field: primaryColor/accentColor hex #RRGGBB, logoUrl/faviconUrl from an upload or https, fontFamily a CSS font list, footerText, defaultCta; an absent field is unchanged, null removes it (the workspace value applies). The company's QR landing pages use this branding on any host.

Input Schema

NameRequiredDescriptionDefault
idYes
nameNoHuman-readable display name.
themeNoCompany branding, merged field by field: absent = unchanged, null = removed (the workspace value applies). primaryColor/accentColor are hex #RRGGBB; logoUrl/faviconUrl an upload (/uploads/…) or https URL; fontFamily a CSS font list.
statusNoLifecycle state. `archived` companies are hidden from default listings but kept for analytics joins.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / theme / additionalProperties
      Previous value: -{}New value: +false
    • changedInput schema / properties / theme / description
      Previous value: -"Per-company theme overrides (color, logo URL, etc.). Merged field-by-field over the tenant theme."New value: +"Company branding, merged field by field: absent = unchanged, null = removed (the workspace value applies). primaryColor/accentColor are hex #RRGGBB; logoUrl/faviconUrl an upload (/uploads/…) or https URL; fontFamily a CSS font list."
    • addedInput schema / properties / theme / properties
      Added value: +{
      +  "accentColor": {
      +    "anyOf": [
      +      {
      +        "anyOf": [
      +          {
      +            "$ref": "#/properties/theme/properties/primaryColor/anyOf/0/anyOf/0"
      +          },
      +          {
      +            "const": "",
      +            "type": "string"
      +          }
      +        ]
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "description": "Hex #RRGGBB. Secondary colour."
      +  },
      +  "defaultCta": {
      +    "anyOf": [
      +      {
      +        "anyOf": [
      +          {
      +            "maxLength": 30,
      +            "type": "string"
      +          },
      +          {
      +            "const": "",
      +            "type": "string"
      +          }
      +        ]
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "description": "Call-to-action on QR frames, e.g. SCAN ME."
      +  },
      +  "faviconUrl": {
      +    "anyOf": [
      +      {
      +        "anyOf": [
      +          {
      +            "$ref": "#/properties/theme/properties/logoUrl/anyOf/0/anyOf/0"
      +          },
      +          {
      +            "const": "",
      +            "type": "string"
      +          }
      +        ]
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "description": "An uploaded asset (/uploads/…) or an https URL."
      +  },
      +  "fontFamily": {
      +    "anyOf": [
      +      {
      +        "anyOf": [
      +          {
      +            "maxLength": 80,
      +            "pattern": "^[\\w\\s,'\".-]{1,80}$",
      +            "type": "string"
      +          },
      +          {
      +            "const": "",
      +            "type": "string"
      +          }
      +        ]
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "description": "CSS font-family list, e.g. \"Georgia, serif\"."
      +  },
      +  "footerText": {
      +    "anyOf": [
      +      {
      +        "anyOf": [
      +          {
      +            "maxLength": 200,
      +            "type": "string"
      +          },
      +          {
      +            "const": "",
      +            "type": "string"
      +          }
      +        ]
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ]
      +  },
      +  "logoUrl": {
      +    "anyOf": [
      +      {
      +        "anyOf": [
      +          {
      +            "maxLength": 1000,
      +            "type": "string"
      +          },
      +          {
      +            "const": "",
      +            "type": "string"
      +          }
      +        ]
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "description": "An uploaded asset (/uploads/…) or an https URL."
      +  },
      +  "primaryColor": {
      +    "anyOf": [
      +      {
      +        "anyOf": [
      +          {
      +            "pattern": "^#[0-9a-fA-F]{6}$",
      +            "type": "string"
      +          },
      +          {
      +            "const": "",
      +            "type": "string"
      +          }
      +        ]
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "description": "Hex #RRGGBB. Buttons, accents and the landing-page glow."
      +  }
      +}
  2. First observed

TDQS

A3.7/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds real behavioral value beyond them: field-by-field merge semantics ('an absent field is unchanged, null removes it'), the fallback to the workspace value, and the downstream effect that QR landing pages render this branding on any host. It stops short of stating auth requirements or failure 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?

Front-loaded with the purpose in the first clause, then dense but purposeful detail. Every clause (merge rule, formats, rendering side effect) earns its place, though the second sentence runs long and packs several distinct rules into one block.

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?

With no output schema, the description carries the return-value burden but the update contract is otherwise well covered: merge semantics, null handling, field formats, and the branding side effect. Missing only error/invalid-input behavior and permission requirements for a nested-object mutation.

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 75% and the schema already documents hex format, the /uploads vs https rule, and CSS font lists, so much of the description's parameter detail duplicates structured data. The one genuinely additive rule, null means removed, is also already in the theme object's schema description. Baseline 3 is appropriate; little new meaning is contributed.

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 and resource ('Change a company's name, status or branding') and enumerates the mutable surface, which is clear on its own. It does not, however, distinguish itself from siblings that touch the same data, notably companies_archive (which also changes status) and company_profile_update. A sibling-routing sentence is the only thing missing.

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?

Usage is only implied: an agent can infer it should call this to mutate company fields. There is no explicit when-to-use versus companies_archive for status transitions, nor any mention of prerequisites or permissions. Adequate but with clear gaps for a mutation tool.

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