SparrowDesk

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/mcp

This 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.

ParameterTypeRequiredDescription
idintegerYesThe conversation ID

list_conversations

List conversations with optional filters, sorting, and pagination.

ParameterTypeRequiredDescription
starting_afterstringNoPagination cursor
per_pageintegerNoItems per page, 1–100 (default: 25)
statusarrayNoFilter by status: Open, Pending, Resolved, Closed
priorityarrayNoFilter by priority: Low, Medium, High, Urgent
assigned_to_member_idarray of integersNoFilter by assigned agent IDs
assigned_to_team_idarray of integersNoFilter by assigned team IDs
brand_idarray of integersNoFilter by brand IDs
requested_by_idintegerNoFilter by requestor contact ID
sort_bystringNocreated_at or updated_at (default: created_at)
sort_orderstringNoasc or desc (default: desc)

list_conversation_replies

List replies for a conversation, with optional filtering and pagination.

ParameterTypeRequiredDescription
idintegerYesThe conversation ID
starting_afterstringNoPagination cursor
per_pageintegerNoItems per page, 1–100 (default: 25)
typestringNoFilter by INTERNAL_NOTE or REPLY
sort_orderstringNoasc or desc (default: desc)

add_conversation_reply

Add a reply or internal note to a conversation.

ParameterTypeRequiredDescription
idintegerYesThe conversation ID
reply_textstringYesThe content of the reply
typestringYesREPLY (visible to customer) or INTERNAL_NOTE (agents only)

create_conversation

Create a new conversation/ticket in SparrowDesk.

ParameterTypeRequiredDescription
subjectstringYesConversation subject
descriptionstringYesConversation description
requested_bystringYesEmail or phone of the requester
prioritystringNoLow, Medium, High, or Urgent (default: Medium)
sourcestringNoMail or Call (default: Call)
statusstringNoOpen, Pending, Resolved, or Closed (default: Open)
brand_idintegerNoBrand ID (uses account default if omitted)
assigneestringNoAgent email address to assign to
team_idintegerNoTeam ID to assign to
custom_fieldsarrayNoArray of { internal_name, value } objects

create_contact

Create a new contact. Either email or phone must be provided.

ParameterTypeRequiredDescription
first_namestringYesContact's first name
last_namestringNoContact's last name
emailstringNoEmail address (required if phone not provided)
phonestringNoPhone number (required if email not provided)
company_idintegerNoID of the company to associate with
custom_fieldsobjectNoCustom field key-value pairs

update_contact

Update an existing contact.

ParameterTypeRequiredDescription
idintegerYesThe contact ID to update
first_namestringNoContact's first name
last_namestringNoContact's last name
emailstringNoEmail address
phonestringNoPhone number
company_idintegerNoID of the company to associate with
blockedbooleanNoWhether the contact is blocked
custom_fieldsobjectNoCustom field key-value pairs

get_contact

Fetch a single contact by its numeric ID.

ParameterTypeRequiredDescription
idintegerYesThe contact ID

list_contact_fields

Retrieve all contact fields defined in the account.

ParameterTypeRequiredDescription
searchstringNoSearch contact fields by name
pageintegerNoPage number for pagination
limitintegerNoResults per page

list_members

Retrieve a paginated list of all team members in the account.

ParameterTypeRequiredDescription
starting_afterstringNoPagination cursor
per_pageintegerNoItems per page, 1–100 (default: 25)

get_me

Retrieve the currently authenticated member's profile. No parameters required.