Read Groove shared-inbox conversations, contacts, agents and tags; close, assign, snooze and tag.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
ASSIGNS a conversation to an agent and/or team. Pass agent_id, team_id, or both (at least one is required). Groove GraphQL: conversationAssign.
The conversation id (opaque GraphQL ID).
Team id to assign the conversation to.
Agent id to assign the conversation to.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
ASSIGNS a conversation to an agent and/or team. Pass agent_id, team_id, or both (at least one is required). Groove GraphQL: conversationAssign.
| Argument | Type | Description |
|---|---|---|
| id* | string | The conversation id (opaque GraphQL ID). |
| team_id | string | Team id to assign the conversation to. |
| agent_id | string | Agent id to assign the conversation to. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The conversation id (opaque GraphQL ID)."
},
"team_id": {
"type": "string",
"description": "Team id to assign the conversation to."
},
"agent_id": {
"type": "string",
"description": "Agent id to assign the conversation to."
}
}
}CLOSES a conversation (marks it resolved) in the shared inbox. Groove GraphQL: conversationClose.
| Argument | Type | Description |
|---|---|---|
| id* | string | The conversation id (opaque GraphQL ID). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The conversation id (opaque GraphQL ID)."
}
}
}Get a single contact by id — name, email, role, type, and conversation count. Groove GraphQL: contact(contactId: ID!).
| Argument | Type | Description |
|---|---|---|
| id* | string | The Groove object id (opaque GraphQL ID, passed as a string). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The Groove object id (opaque GraphQL ID, passed as a string)."
}
}
}Get a single conversation by id — subject, state, assignment, contact, channel, counts, and tags. Groove GraphQL: conversation(id: ID!).
| Argument | Type | Description |
|---|---|---|
| id* | string | The Groove object id (opaque GraphQL ID, passed as a string). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The Groove object id (opaque GraphQL ID, passed as a string)."
}
}
}List agents (support staff / users) in the account, with role and state. Paginate with first/after. Groove GraphQL: agents.
| Argument | Type | Description |
|---|---|---|
| after | string | Relay pagination cursor — pass the previous page's `endCursor` to get the next page. |
| first | integer | How many records to return (Relay pagination `first`). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"after": {
"type": "string",
"description": "Relay pagination cursor — pass the previous page's `endCursor` to get the next page."
},
"first": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "How many records to return (Relay pagination `first`)."
}
}
}List channels (mailboxes / inboxes — email, chat, etc.) configured in the account. Paginate with first/after. Groove GraphQL: channels.
| Argument | Type | Description |
|---|---|---|
| after | string | Relay pagination cursor — pass the previous page's `endCursor` to get the next page. |
| first | integer | How many records to return (Relay pagination `first`). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"after": {
"type": "string",
"description": "Relay pagination cursor — pass the previous page's `endCursor` to get the next page."
},
"first": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "How many records to return (Relay pagination `first`)."
}
}
}List customer contacts (people who wrote in). Optional keyword search over name/email; paginate with first/after. Groove GraphQL: contacts(keywords: String).
| Argument | Type | Description |
|---|---|---|
| after | string | Relay pagination cursor — pass the previous page's `endCursor` to get the next page. |
| first | integer | How many records to return (Relay pagination `first`). |
| keywords | string | Keyword search across contacts (name/email). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"after": {
"type": "string",
"description": "Relay pagination cursor — pass the previous page's `endCursor` to get the next page."
},
"first": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "How many records to return (Relay pagination `first`)."
},
"keywords": {
"type": "string",
"description": "Keyword search across contacts (name/email)."
}
}
}List support conversations (tickets) in the shared inbox, with rich filters. Filter by state, channel_id, folder_id, tag_name, assigned, starred, or keywords; paginate with first/after. Groove GraphQL: conversations(filter: ConversationFilter).
| Argument | Type | Description |
|---|---|---|
| after | string | Relay pagination cursor — pass the previous page's `endCursor` to get the next page. |
| first | integer | How many records to return (Relay pagination `first`). |
| state | string | Filter by conversation state. |
| starred | boolean | If set, filter to starred (true) or unstarred (false) conversations. |
| assigned | boolean | If set, filter to assigned (true) or unassigned (false) conversations. |
| keywords | string | Full-text keyword search across conversations. |
| tag_name | string | Filter to conversations carrying this tag name. |
| folder_id | string | Filter to a single folder id. |
List folders (saved views / smart folders that group conversations), with conversation counts. Paginate with first/after. Groove GraphQL: folders.
| Argument | Type | Description |
|---|---|---|
| after | string | Relay pagination cursor — pass the previous page's `endCursor` to get the next page. |
| first | integer | How many records to return (Relay pagination `first`). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"after": {
"type": "string",
"description": "Relay pagination cursor — pass the previous page's `endCursor` to get the next page."
},
"first": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "How many records to return (Relay pagination `first`)."
}
}
}List tags defined in the account (id, name, color) — use tag ids with the tag/untag write tools. Paginate with first/after. Groove GraphQL: tags.
| Argument | Type | Description |
|---|---|---|
| after | string | Relay pagination cursor — pass the previous page's `endCursor` to get the next page. |
| first | integer | How many records to return (Relay pagination `first`). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"after": {
"type": "string",
"description": "Relay pagination cursor — pass the previous page's `endCursor` to get the next page."
},
"first": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "How many records to return (Relay pagination `first`)."
}
}
}List teams (groups of agents that conversations can be assigned to). Paginate with first/after. Groove GraphQL: teams.
| Argument | Type | Description |
|---|---|---|
| after | string | Relay pagination cursor — pass the previous page's `endCursor` to get the next page. |
| first | integer | How many records to return (Relay pagination `first`). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"after": {
"type": "string",
"description": "Relay pagination cursor — pass the previous page's `endCursor` to get the next page."
},
"first": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "How many records to return (Relay pagination `first`)."
}
}
}RE-OPENS a closed/snoozed conversation in the shared inbox. Groove GraphQL: conversationOpen.
| Argument | Type | Description |
|---|---|---|
| id* | string | The conversation id (opaque GraphQL ID). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The conversation id (opaque GraphQL ID)."
}
}
}SNOOZES a conversation until the given time (ISO8601) — it drops out of the inbox until then. Groove GraphQL: conversationSnooze.
| Argument | Type | Description |
|---|---|---|
| id* | string | The conversation id (opaque GraphQL ID). |
| until* | string | When to un-snooze, as an ISO8601 timestamp (e.g. 2026-08-01T09:00:00Z). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"until"
],
"properties": {
"id": {
"type": "string",
"description": "The conversation id (opaque GraphQL ID)."
},
"until": {
"type": "string",
"description": "When to un-snooze, as an ISO8601 timestamp (e.g. 2026-08-01T09:00:00Z)."
}
}
}STARS a conversation (flags it for attention) in the shared inbox. Groove GraphQL: conversationStar.
| Argument | Type | Description |
|---|---|---|
| id* | string | The conversation id (opaque GraphQL ID). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The conversation id (opaque GraphQL ID)."
}
}
}ADDS tags (by tag id) to a conversation. Use groove_list_tags to find tag ids. Groove GraphQL: conversationTag.
| Argument | Type | Description |
|---|---|---|
| id* | string | The conversation id (opaque GraphQL ID). |
| tag_ids* | array | Tag ids to add to the conversation. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"tag_ids"
],
"properties": {
"id": {
"type": "string",
"description": "The conversation id (opaque GraphQL ID)."
},
"tag_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tag ids to add to the conversation."
}
}
}REMOVES tags (by tag id) from a conversation. Use groove_list_tags to find tag ids. Groove GraphQL: conversationUntag.
| Argument | Type | Description |
|---|---|---|
| id* | string | The conversation id (opaque GraphQL ID). |
| tag_ids* | array | Tag ids to remove from the conversation. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"tag_ids"
],
"properties": {
"id": {
"type": "string",
"description": "The conversation id (opaque GraphQL ID)."
},
"tag_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tag ids to remove from the conversation."
}
}
}| channel_id |
| string |
| Filter to a single channel (mailbox) id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"after": {
"type": "string",
"description": "Relay pagination cursor — pass the previous page's `endCursor` to get the next page."
},
"first": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "How many records to return (Relay pagination `first`)."
},
"state": {
"enum": [
"unread",
"opened",
"closed",
"snoozed",
"spam"
],
"type": "string",
"description": "Filter by conversation state."
},
"starred": {
"type": "boolean",
"description": "If set, filter to starred (true) or unstarred (false) conversations."
},
"assigned": {
"type": "boolean",
"description": "If set, filter to assigned (true) or unassigned (false) conversations."
},
"keywords": {
"type": "string",
"description": "Full-text keyword search across conversations."
},
"tag_name": {
"type": "string",
"description": "Filter to conversations carrying this tag name."
},
"folder_id": {
"type": "string",
"description": "Filter to a single folder id."
},
"channel_id": {
"type": "string",
"description": "Filter to a single channel (mailbox) id."
}
}
}