MCP tools
The catalog of ~50 tools the Competitor Tracker & Co. MCP server exposes: competitors, changes, snapshots, labels, dispatches and org management, with params.
The MCP server exposes 53 tools across the Competitor Tracker & Co. domains. Each tool forwards your credential to the API, so the scope it names is the scope your token or key must carry. Destructive tools require confirm: true before they run.
See Model Context Protocol for setup and connection details.
Read tools
list_competitors
Read-only
List the current organization's competitor subscriptions, newest first. Returns a page of competitors with their tracked categories and labels, plus a nextCursor for paging. Requires the competitors:read scope.
| Parameter | Required | Description |
|---|---|---|
cursor | no | Opaque cursor from a previous page's nextCursor. |
limit | no | Maximum subscriptions to return (1–200, default 50). |
search | no | Free-text search over a competitor's name, display name, and URL (case-insensitive substring). |
get_competitor
Read-only
Get a single competitor subscription belonging to the current organization by id, including its tracked categories, labels, and billing summary. Requires the competitors:read scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The competitor subscription id. |
get_competitor_timeline
Read-only
Get the chronological activity timeline for a competitor (crawls, snapshots, and detected changes). Requires the competitors:read scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The competitor subscription id. |
list_pages
Read-only
List the tracked pages for a competitor subscription, optionally filtered by page-type slug (e.g. pricing, product). Requires the pages:read scope.
| Parameter | Required | Description |
|---|---|---|
competitorId | yes | The competitor subscription id whose pages to list. |
pageType | no | Filter to these page-type slugs, e.g. ['pricing', 'product']. Unknown slugs match nothing. |
get_snapshot
Read-only
Get a single snapshot by id, including signed URLs for its HTML, markdown, and screenshot assets plus the tracked page it was captured from. Requires the snapshots:read scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The snapshot id. |
list_snapshots
Read-only
List the snapshots captured for a tracked page, newest first, with a nextCursor for paging. Requires the snapshots:read scope.
| Parameter | Required | Description |
|---|---|---|
trackedPageId | yes | The tracked page id whose snapshots to list. |
cursor | no | Opaque cursor from a previous page's nextCursor. |
limit | no | Maximum snapshots to return (1–200, default 50). |
list_org_changes
Read-only
List the org-wide feed of detected changes across every actively subscribed competitor, newest first. Filter by category, priority, and a [since, until) detection window, or pass count: true for aggregate totals instead of a page of rows. Requires the changes:read scope.
| Parameter | Required | Description |
|---|---|---|
cursor | no | Opaque cursor from a previous page's nextCursor. |
limit | no | Maximum changes to return (1–200, default 50). |
categories | no | Filter to these change categories, e.g. ['pricing_changes', 'product_changes']. |
priorities | no | Filter to these priorities ('high', 'medium', 'low'). |
since | no | Only changes detected at or after this ISO-8601 timestamp (with offset). |
until | no | Exclusive upper bound; only changes detected before this ISO-8601 timestamp. |
count | no | When true, return aggregate totals ({ total, byPriority, byCategory }) over the window instead of a page of rows. |
list_competitor_changes
Read-only
List detected changes for a single subscribed competitor, newest first, with optional category, priority, and since filters. Requires the changes:read scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The competitor subscription id. |
cursor | no | Opaque cursor from a previous page's nextCursor. |
limit | no | Maximum changes to return (1–200, default 50). |
categories | no | Filter to these change categories, e.g. ['pricing_changes', 'product_changes']. |
priorities | no | Filter to these priorities ('high', 'medium', 'low'). |
since | no | Only changes detected at or after this ISO-8601 timestamp (with offset). |
list_snapshot_changes
Read-only
List detected changes attributed to a single snapshot, newest first, with optional category, priority, and since filters. Requires the changes:read scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The snapshot id. |
cursor | no | Opaque cursor from a previous page's nextCursor. |
limit | no | Maximum changes to return (1–200, default 50). |
categories | no | Filter to these change categories, e.g. ['pricing_changes', 'product_changes']. |
priorities | no | Filter to these priorities ('high', 'medium', 'low'). |
since | no | Only changes detected at or after this ISO-8601 timestamp (with offset). |
list_labels
Read-only
List the current organization's labels, newest first. Returns a page of labels with their colors, plus a nextCursor for paging. Requires the labels:read scope.
| Parameter | Required | Description |
|---|---|---|
cursor | no | Opaque cursor from a previous page's nextCursor. |
limit | no | Maximum labels to return (1–200, default 50). |
search | no | Free-text search over the label name (case-insensitive substring). |
get_label
Read-only
Get a single label belonging to the current organization by id, including its name and color. Requires the labels:read scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The label id. |
get_current_user
Read-only
Read the signed-in user's profile, including their name fields and account timestamps. Requires the account:read scope.
No parameters.
list_my_orgs
Read-only
List every organization the signed-in user is an active member of, with the role they hold and when they joined. Requires the account:read scope.
No parameters.
get_balance
Read-only
Get the current organization's coin balance and a forward-looking renewal summary (paid competitor counts and upcoming charges). Requires the billing:read scope.
No parameters.
list_transactions
Read-only
List the current organization's coin transactions, newest first. Returns a page of transactions with their deltas, running balance, and reason, plus a nextCursor for paging. Requires the billing:read scope.
| Parameter | Required | Description |
|---|---|---|
cursor | no | Opaque cursor from a previous page's nextCursor. |
limit | no | Maximum transactions to return (1–200, default 50). |
get_org
Read-only
Read the current organization, including the application domain it has claimed (null until one is set). Requires the org:read scope.
No parameters.
list_members
Read-only
List active members of the current organization. Returns a page of members with their roles, plus a nextCursor for paging. Requires the members:read scope.
| Parameter | Required | Description |
|---|---|---|
cursor | no | Opaque cursor from a previous page's nextCursor. |
limit | no | Maximum members to return (1–200, default 50). |
list_invites
Read-only
List pending invitations for the current organization, newest-first. Requires the invites:read scope.
No parameters.
list_api_keys
Read-only
List the current organization's API keys with their names, scopes, expiry, and last-used time. Secret values are never returned here. Requires the account:read scope.
No parameters.
list_api_key_usage
Read-only
List an API key's usage-log entries, newest first, with method, path, status, scope, and timestamp, plus a nextCursor for paging. Requires the account:read scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The API key id. |
cursor | no | Opaque cursor from a previous page's nextCursor. |
limit | no | Maximum usage entries to return (1–100, default 25). |
list_dispatches
Read-only
List the current organization's notifications, each with its tracked labels, theme, and recipients. Requires the dispatches:read scope.
No parameters.
list_dispatch_deliveries
Read-only
List a notification's email delivery attempts, newest-first, with a nextCursor for paging. Requires the dispatches:read scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The notification id. |
cursor | no | Opaque cursor from a previous page's nextCursor. |
limit | no | Maximum delivery attempts to return (1–100, default 25). |
list_dispatch_engagement
Read-only
List the deliveries and opens recorded for one notification, newest-first, with a nextCursor for paging. Each entry names the recipient, what happened and when it happened. An event is one of delivered, failed or opened. An open also says whether the reader looked like a person or an automated one, and a failure carries a short error saying why the brief never arrived. This is a log rather than a report: it carries no totals and no rates. Requires the dispatches:read scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The notification id. |
cursor | no | Opaque cursor from a previous page's nextCursor. |
limit | no | Maximum events to return (1–100, default 25). |
list_webhooks
Read-only
List the current organization's webhooks with their destination URLs and active state. Requires the dispatches:read scope.
No parameters.
list_webhook_deliveries
Read-only
List a webhook's delivery attempts, newest-first, with a nextCursor for paging. Requires the dispatches:read scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The webhook id. |
cursor | no | Opaque cursor from a previous page's nextCursor. |
limit | no | Maximum delivery attempts to return (1–100, default 25). |
Write tools
subscribe_competitor
Write
Start tracking a new competitor by URL, optionally with a display name and the change categories to track. Requires the competitors:write scope.
| Parameter | Required | Description |
|---|---|---|
url | yes | The competitor's URL, e.g. https://example.com. |
displayName | no | A friendly name for this competitor. |
trackedCategories | no | Change categories to track, e.g. ['pricing_changes', 'product_changes']. |
update_competitor
Write · Idempotent
Update a competitor's display name and/or the change categories tracked for it. Requires the competitors:write scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The competitor subscription id. |
displayName | no | A friendly name, or null to clear it. |
trackedCategories | no | Replacement set of change categories to track. |
create_label
Write
Create a new label for the current organization with a name and a color. Requires the labels:write scope.
| Parameter | Required | Description |
|---|---|---|
name | yes | Short label name, e.g. 'direct'. Letters, numbers, spaces, dashes, underscores. |
color | yes | Label color, one of: gray, red, orange, yellow, green, blue, purple, pink. |
update_label
Write · Idempotent
Rename and/or recolor a label belonging to the current organization. Requires the labels:write scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The label id. |
name | no | New label name. Letters, numbers, spaces, dashes, underscores. |
color | no | New label color, one of: gray, red, orange, yellow, green, blue, purple, pink. |
assign_label
Write
Assign a label to a competitor (idempotent if already assigned). Returns the competitor's post-assign label set. Requires the labels:write scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The competitor subscription id to assign the label to. |
labelId | yes | The label id to assign. |
update_current_user
Write · Idempotent
Update the signed-in user's profile name fields (name, firstName, lastName). Pass null for a field to clear it; omit a field to leave it unchanged. Requires the account:write scope.
| Parameter | Required | Description |
|---|---|---|
name | no | Legacy display name, or null to clear it. |
firstName | no | Given name, or null to clear it. |
lastName | no | Family name, or null to clear it. |
update_org
Write · Idempotent
Rename the current organization. Admin-only. Requires the org:write scope.
| Parameter | Required | Description |
|---|---|---|
name | yes | The new organization name. |
update_member_role
Write · Idempotent
Change a member's role to admin or member. Owner is intentionally not assignable here — use transfer_org_ownership to change ownership. Requires the members:write scope.
| Parameter | Required | Description |
|---|---|---|
userId | yes | The user id of the member whose role is changing. |
role | yes | The member's new role. |
create_invite
Write
Invite a new member to the organization by email, joining at the admin or member role (defaults to member). Sends an invitation email. Requires the invites:write scope.
| Parameter | Required | Description |
|---|---|---|
email | yes | The email address to invite. |
role | no | The role the invitee joins as (defaults to member). |
mint_api_key
Write
Create a new API key for the current organization with a name, a set of scopes, and an optional expiry. The plaintext secret is returned exactly once in the response and can never be retrieved again, so store it immediately. Requires the account:write scope.
| Parameter | Required | Description |
|---|---|---|
name | yes | A human-readable name for the key, e.g. 'CI deploy bot'. |
scopes | yes | The scopes to grant, e.g. ['competitors:read', 'changes:read']. Cannot exceed what your role can grant. |
expiresAt | no | An optional ISO 8601 expiry timestamp, e.g. '2027-01-01T00:00:00.000Z'. |
create_dispatch
Write
Create a notification for the current organization, optionally scoped to specific labels. Requires the dispatches:write scope.
| Parameter | Required | Description |
|---|---|---|
name | yes | A friendly name for this notification. |
labelIds | no | Label ids to scope this notification to, e.g. ['01J0000000000000000000A001']. |
update_dispatch
Write · Idempotent
Rename, recolor, or rescope a notification belonging to the current organization. Requires the dispatches:write scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The notification id. |
name | no | A new friendly name for this notification. |
labelIds | no | Replacement set of label ids to scope this notification to. |
theme | no | The notification's email theme. |
add_dispatch_recipient
Write
Add a recipient to a notification. Members are added immediately; external recipients are emailed a confirmation link and stay pending until they confirm. Requires the dispatches:write scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The notification id. |
kind | yes | Whether the recipient is an organization member or an external email. |
userId | no | The member's user id. Required when kind is 'member'. |
email | no | The external recipient's email. Required when kind is 'external'. |
create_webhook
Write
Register a webhook for the current organization. The signing secret is returned once. Requires the dispatches:write scope.
| Parameter | Required | Description |
|---|---|---|
url | yes | The https destination URL that signed delivery payloads are POSTed to. |
start_tracking_competitors
Write
Set someone up with competitor tracking before they have an account, and hand them a link to take it over.
Name the companies they care about, by name or by domain. We match them against the companies we already track and the first three you list go on file, with their change history readable straight away. We do not fetch an address you supply: a company we do not track yet comes back in shortfalls, which is not a failure — it is something the person can add themselves once they have claimed.
Call this ONCE per person, with every company you know about. If more come up later, use add_tracked_competitors to fill the remaining slots on the same organization rather than calling this again — a second call here starts a second organization with a second link, and the person ends up with two things to claim instead of one.
Nothing is charged to anyone, no email is sent and the organization is removed after four days unless someone claims it. The claim link comes back in the response and travels no further, so pass it on and tell them what went on file and what did not.
| Parameter | Required | Description |
|---|---|---|
companies | yes | Company names or domains, in the order they matter to the person you are acting for, e.g. ['Notion', 'linear.app']. The first three we already track get the slots; everything else comes back in shortfalls. |
sessionId | no | Your own id for the conversation this ask came from. It ties the claim link back to where it started and is never treated as a credential. Leave it out if you have none. |
add_tracked_competitors
Write · Idempotent
Add more companies to an organization you started with start_tracking_competitors, using the key that call gave you.
The three slots can be filled over as many calls as you like, so you do not have to know every company up front. What is already on file counts towards the three: name two more when one is on file and one goes on, the other comes back in shortfalls waiting behind the claim. A company already on file is reported back and takes no slot.
Companies are matched by name or by domain against the ones we already track, exactly as at the start. We do not fetch an address you supply. The claim link stays the same one and is kept up to date, so the person sees everything on file and everything still outstanding when they open it.
Authenticate with the key from the response that created the organization; that key is what says which one to add to, and it is good for as long as the organization is. If the person has already claimed, or the four days have run out, you get a plain answer saying so and nothing is changed.
| Parameter | Required | Description |
|---|---|---|
companies | yes | More company names or domains to add, in the order they matter to the person you are acting for. They fill whatever slots are left of the three; anything that does not fit comes back in shortfalls. |
Destructive tools
unsubscribe_competitor
Write · Destructive · Idempotent
Stop tracking a competitor and remove its subscription. This is irreversible — pass confirm: true to proceed. Requires the competitors:write scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The competitor subscription id. |
confirm | yes | Must be true to confirm this irreversible action (stops tracking this competitor). |
delete_label
Write · Destructive · Idempotent
Delete a label and detach it from every competitor it is assigned to. This is irreversible — pass confirm: true to proceed. Requires the labels:write scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The label id. |
confirm | yes | Must be true to confirm this irreversible action. |
unassign_label
Write · Destructive · Idempotent
Unassign a label from a competitor. This is irreversible — pass confirm: true to proceed. Requires the labels:write scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The competitor subscription id to unassign the label from. |
labelId | yes | The label id to unassign. |
confirm | yes | Must be true to confirm this irreversible action. |
delete_org
Write · Destructive · Idempotent
Delete the current organization. Owner-only. This is irreversible — pass confirm: true to proceed. Requires the org:write scope.
| Parameter | Required | Description |
|---|---|---|
confirm | yes | Must be true to confirm this irreversible action. |
transfer_org_ownership
Write · Destructive
Transfer ownership of the current organization: the current owner becomes admin and the target member becomes owner. This is irreversible — pass confirm: true to proceed. Requires the org:write scope.
| Parameter | Required | Description |
|---|---|---|
to_user_id | yes | The user id of the member who will become the new owner. |
confirm | yes | Must be true to confirm this irreversible action. |
leave_org
Write · Destructive
Leave the current organization. Sole owners must transfer ownership first. This is irreversible — pass confirm: true to proceed. Requires the account:write scope.
| Parameter | Required | Description |
|---|---|---|
confirm | yes | Must be true to confirm this irreversible action. |
revoke_invite
Write · Destructive · Idempotent
Revoke a pending invitation. This is irreversible — pass confirm: true to proceed. Requires the invites:write scope.
| Parameter | Required | Description |
|---|---|---|
inviteId | yes | The id of the pending invitation to revoke. |
confirm | yes | Must be true to confirm this irreversible action. |
revoke_api_key
Write · Destructive · Idempotent
Permanently revoke an API key by id so it can no longer authenticate. This is irreversible — pass confirm: true to proceed. Requires the account:write scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The API key id. |
confirm | yes | Must be true to confirm this irreversible action. |
regenerate_api_key
Write · Destructive
Rotate an API key's secret by id. This immediately invalidates the previous secret and returns a new plaintext secret exactly once — any client still using the old secret will stop working. This is irreversible — pass confirm: true to proceed. Requires the account:write scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The API key id. |
confirm | yes | Must be true to confirm this irreversible action. |
delete_dispatch
Write · Destructive · Idempotent
Delete a notification belonging to the current organization. This is irreversible — pass confirm: true to proceed. Requires the dispatches:write scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The notification id. |
confirm | yes | Must be true to confirm this irreversible action. |
remove_dispatch_recipient
Write · Destructive · Idempotent
Remove a recipient from a notification. The pinned owner cannot be removed. This is irreversible — pass confirm: true to proceed. Requires the dispatches:write scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The notification id. |
recipientId | yes | The recipient id to remove. |
confirm | yes | Must be true to confirm this irreversible action. |
delete_webhook
Write · Destructive · Idempotent
Delete a webhook, freeing one of the organization's slots. This is irreversible — pass confirm: true to proceed. Requires the dispatches:write scope.
| Parameter | Required | Description |
|---|---|---|
id | yes | The webhook id. |
confirm | yes | Must be true to confirm this irreversible action. |