Set workspace competitors
Add, edit, or stop tracking the competitors a workspace is measured against in AI answers.
Tool name: set_workspace_competitors
Cost: Free - not billed, and does not draw on a plan quota.
Writes data - confirmation required
This tool creates or changes data. It is not annotated readOnlyHint, so
your MCP client prompts you before it runs, and the server asks for an
explicit confirmation describing exactly what will change. Declining cancels
the call cleanly.
Add, edit, or stop tracking the competitors a workspace is measured against in AI answers. The tracked set decides every competitive metric - share of voice, the visibility index, the competitor table - so adding a brand starts measuring it from the next monitoring run onward, and it is NOT backfilled.
Call get_workspace_competitors first and show the user the current set. update replaces each list you pass wholesale (send the full list, not just the new entries; [] clears one) and leaves the lists you omit alone. remove takes ids or names and is permanent: it also discards that brand's recorded history, so check measuredDays first and tell the user what they are giving up.
Facts are vetted per value. A shared platform host (linkedin.com, x.com…) is refused as a domain because it would credit the brand with every citation of that platform - pass the profile URL, path included, in socialUrls instead. A refused value comes back in rejected with a reason while the rest of the write still applies; always report those back to the user. The workspace's own brand cannot be edited here - use set_workspace_brand_terms for it.
Parameters
| Parameter | Type | Required | Notes |
|---|---|---|---|
workspaceId | string (uuid) | Yes | - |
add | ({ name, aliases, domains, socialUrls, employeeLinkedinUrls })[] | No | Competitors to start tracking. |
update | ({ id, name, newName, aliases, domains, socialUrls, employeeLinkedinUrls })[] | No | Edits to competitors already tracked. |
remove | string[] | No | Competitor ids or names to stop tracking. Permanently discards their recorded visibility history. |
Full input JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"add": {
"description": "Competitors to start tracking.",
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The competitor's brand name, as answers say it."
},
"aliases": {
"description": "Other spellings to match in answer text (legal name, former name).",
"type": "array",
"items": {
"type": "string"
}
},
"domains": {
"description": "The brand's own domains, for citation matching. A shared platform (linkedin.com, x.com…) is refused here - put the profile URL in socialUrls.",
"type": "array",
"items": {
"type": "string"
}
},
"socialUrls": {
"description": "Full profile URLs including the path, e.g. https://x.com/acme. A bare host is refused: it would match every account on that platform.",
"type": "array",
"items": {
"type": "string"
}
},
"employeeLinkedinUrls": {
"description": "linkedin.com profile URLs of the brand's people.",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": ["name"]
}
},
"update": {
"description": "Edits to competitors already tracked.",
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"description": "The competitor to edit; or match by name.",
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"name": {
"description": "Current name, used to find the competitor when id is omitted.",
"type": "string"
},
"newName": {
"description": "Rename the competitor to this.",
"type": "string"
},
"aliases": {
"type": "array",
"items": {
"type": "string"
}
},
"domains": {
"type": "array",
"items": {
"type": "string"
}
},
"socialUrls": {
"type": "array",
"items": {
"type": "string"
}
},
"employeeLinkedinUrls": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
},
"remove": {
"description": "Competitor ids or names to stop tracking. Permanently discards their recorded visibility history.",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": ["workspaceId"]
}Response
Full output JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"selfBrand": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"name": {
"type": "string"
},
"aliases": {
"type": "array",
"items": {
"type": "string"
}
},
"domains": {
"type": "array",
"items": {
"type": "string"
}
},
"socialUrls": {
"type": "array",
"items": {
"type": "string"
}
},
"employeeLinkedinUrls": {
"type": "array",
"items": {
"type": "string"
}
},
"isSelf": {
"type": "boolean"
},
"measuredDays": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"lastMeasuredOn": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"aliases",
"domains",
"socialUrls",
"employeeLinkedinUrls",
"isSelf",
"measuredDays"
],
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"competitors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"name": {
"type": "string"
},
"aliases": {
"type": "array",
"items": {
"type": "string"
}
},
"domains": {
"type": "array",
"items": {
"type": "string"
}
},
"socialUrls": {
"type": "array",
"items": {
"type": "string"
}
},
"employeeLinkedinUrls": {
"type": "array",
"items": {
"type": "string"
}
},
"isSelf": {
"type": "boolean"
},
"measuredDays": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"lastMeasuredOn": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"aliases",
"domains",
"socialUrls",
"employeeLinkedinUrls",
"isSelf",
"measuredDays"
],
"additionalProperties": {}
}
},
"limit": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"rejected": {
"type": "array",
"items": {
"type": "object",
"properties": {
"competitor": {
"type": "string"
},
"field": {
"type": "string"
},
"value": {
"type": "string"
},
"reason": {
"type": "string"
}
},
"required": ["competitor", "field", "value", "reason"],
"additionalProperties": {}
}
}
},
"required": ["workspaceId", "competitors", "limit", "rejected"],
"additionalProperties": false
}