MCP
Connect AI assistants like Claude to your SparrowDesk account using the Model Context Protocol (MCP)
The SparrowDesk MCP server lets AI assistants read and manage your support data directly inside the conversation. Ask your AI to pull up a ticket, add a reply, look up a contact, or list open conversations, without leaving your chat.
What is MCP?
Model Context Protocol (MCP) is an open standard that connects AI assistants to external tools and data sources. Instead of copy-pasting ticket IDs or switching tabs, your AI can interact with SparrowDesk data as part of the conversation.
What you can do
Once connected, your AI assistant can:
- Read conversations: fetch a single ticket or list conversations filtered by status, priority, assignee, or team
- Reply to conversations: add a public reply or an internal note
- Create tickets: open a new conversation with a subject, description, priority, and assignee
- Manage contacts: create, update, or look up contacts
- Check your team: list team members or see who you're authenticated as
Authentication
Authentication is handled via OAuth, with no API keys to copy or manage. The first time you connect, your MCP client will open a browser window to log in with your SparrowDesk account. After that, the connection is maintained automatically.
Connect to Claude Desktop
Open (or create) ~/Library/Application Support/Claude/claude_desktop_config.json and add the SparrowDesk server:
{
"mcpServers": {
"sparrowdesk": {
"type": "http",
"url": "https://mcp.sparrowdesk.com/mcp"
}
}
}Restart Claude Desktop. The SparrowDesk tools will appear in the tool list, and Claude will prompt you to log in with your SparrowDesk account the first time you use one.
Connect to Claude Code
Run this command in your terminal:
claude mcp add --transport http sparrowdesk https://mcp.sparrowdesk.com/mcpThis adds the server to your Claude Code config. You'll be prompted to authenticate via browser the first time a SparrowDesk tool is called.
Connect to Cursor
Edit ~/.cursor/mcp.json (create it if it doesn't exist):
{
"mcpServers": {
"sparrowdesk": {
"type": "http",
"url": "https://mcp.sparrowdesk.com/mcp"
}
}
}Restart Cursor. The SparrowDesk tools will appear in the Agent tool list. Cursor will open a browser window to complete the OAuth login on first use.
Tool reference
get_conversation
Fetch a single conversation by its numeric ID.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | The conversation ID |
list_conversations
List conversations with optional filters, sorting, and pagination.
| Parameter | Type | Required | Description |
|---|---|---|---|
starting_after | string | No | Pagination cursor |
per_page | integer | No | Items per page, 1–100 (default: 25) |
status | array | No | Filter by status: Open, Pending, Resolved, Closed |
priority | array | No | Filter by priority: Low, Medium, High, Urgent |
assigned_to_member_id | array of integers | No | Filter by assigned agent IDs |
assigned_to_team_id | array of integers | No | Filter by assigned team IDs |
brand_id | array of integers | No | Filter by brand IDs |
requested_by_id | integer | No | Filter by requestor contact ID |
sort_by | string | No | created_at or updated_at (default: created_at) |
sort_order | string | No | asc or desc (default: desc) |
list_conversation_replies
List replies for a conversation, with optional filtering and pagination.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | The conversation ID |
starting_after | string | No | Pagination cursor |
per_page | integer | No | Items per page, 1–100 (default: 25) |
type | string | No | Filter by INTERNAL_NOTE or REPLY |
sort_order | string | No | asc or desc (default: desc) |
add_conversation_reply
Add a reply or internal note to a conversation.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | The conversation ID |
reply_text | string | Yes | The content of the reply |
type | string | Yes | REPLY (visible to customer) or INTERNAL_NOTE (agents only) |
create_conversation
Create a new conversation/ticket in SparrowDesk.
| Parameter | Type | Required | Description |
|---|---|---|---|
subject | string | Yes | Conversation subject |
description | string | Yes | Conversation description |
requested_by | string | Yes | Email or phone of the requester |
priority | string | No | Low, Medium, High, or Urgent (default: Medium) |
source | string | No | Mail or Call (default: Call) |
status | string | No | Open, Pending, Resolved, or Closed (default: Open) |
brand_id | integer | No | Brand ID (uses account default if omitted) |
assignee | string | No | Agent email address to assign to |
team_id | integer | No | Team ID to assign to |
custom_fields | array | No | Array of { internal_name, value } objects |
create_contact
Create a new contact. Either email or phone must be provided.
| Parameter | Type | Required | Description |
|---|---|---|---|
first_name | string | Yes | Contact's first name |
last_name | string | No | Contact's last name |
email | string | No | Email address (required if phone not provided) |
phone | string | No | Phone number (required if email not provided) |
company_id | integer | No | ID of the company to associate with |
custom_fields | object | No | Custom field key-value pairs |
update_contact
Update an existing contact.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | The contact ID to update |
first_name | string | No | Contact's first name |
last_name | string | No | Contact's last name |
email | string | No | Email address |
phone | string | No | Phone number |
company_id | integer | No | ID of the company to associate with |
blocked | boolean | No | Whether the contact is blocked |
custom_fields | object | No | Custom field key-value pairs |
get_contact
Fetch a single contact by its numeric ID.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | The contact ID |
list_contact_fields
Retrieve all contact fields defined in the account.
| Parameter | Type | Required | Description |
|---|---|---|---|
search | string | No | Search contact fields by name |
page | integer | No | Page number for pagination |
limit | integer | No | Results per page |
list_members
Retrieve a paginated list of all team members in the account.
| Parameter | Type | Required | Description |
|---|---|---|---|
starting_after | string | No | Pagination cursor |
per_page | integer | No | Items per page, 1–100 (default: 25) |
get_me
Retrieve the currently authenticated member's profile. No parameters required.