LibreDesk MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LIBREDESK_URL | Yes | Base URL of your Libredesk instance, without a trailing slash (for example, http://localhost:9000). | |
| LIBREDESK_API_KEY | Yes | Agent API key from the Libredesk admin UI. | |
| LIBREDESK_API_SECRET | Yes | Agent API secret paired with the API key. | |
| LIBREDESK_MCP_READ_ONLY | No | Set to the exact value "true" to register only GET tools and drop write operations. Unset, writes are enabled. | |
| LIBREDESK_MCP_UPLOAD_DIR | No | Directory from which file uploads may read files. Unset, any tool argument carrying a file path is refused. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_agentsC | Get Agents
Requires the |
| create_agentB | Create Agent
Requires the |
| get_current_agentC | Get Current Agent GET /api/v1/agents/me Tags: Agents |
| update_agent_availabilityC | Update Current Agent Availability PUT /api/v1/agents/me/availability Tags: Agents |
| delete_agentA | Delete Agent
Signs the agent out of all sessions and unassigns their open conversations. Requires the |
| get_agentC | Get Agent
Requires the |
| update_agentB | Update Agent
Changing the password or disabling the agent signs them out of all sessions. Requires the |
| revoke_api_keyB | Revoke A P I Key
Requires the |
| generate_api_keyC | Generate A P I Key
Requires the |
| ai_completionC | A I Completion POST /api/v1/ai/completion Tags: AI completions |
| get_ai_promptsC | Get A I Prompts GET /api/v1/ai/prompts Tags: AI completions |
| get_contactsC | Get Contacts
Requires the |
| create_contactB | Create Contact
Creates a contact. Either |
| search_contactsB | Search Contacts
Matches contacts whose email or phone number contains the query. Requires the |
| get_contactC | Get Contact
Requires the |
| update_contactC | Update Contact
Requires the |
| delete_contactA | Delete Contact
Permanently deletes the contact along with their conversations, messages and notes. Requires the |
| block_contactB | Block or Unblock Contact
Requires the |
| get_contact_notesB | Get Contact Notes
Requires the |
| create_contact_noteB | Create Contact Note
Requires the |
| delete_contact_noteA | Delete Contact Note
Deletes a contact note. Agents without the Admin role can delete only their own notes. Requires the |
| create_conversationC | Create Conversation
Requires the |
| get_all_conversationsC | Get all Conversations
Requires the |
| get_assigned_conversationsB | Get Assigned Conversations
Get all assigned conversations to current user. Requires the |
| search_conversationsA | Search Conversations
Matches conversations whose reference number equals the query or whose contact email contains it. Returns only conversations the caller can access. Use |
| get_unassigned_conversationsA | Get Unassigned Conversations
Get all conversations not assigned to any user and team. Requires the |
| send_messageB | Send Message
Replies require the |
| get_messageC | Get Message
Requires the |
| delete_messageA | Delete Message
Deletes a private note. Its content is replaced with a placeholder and its attachments are unlinked. Agents can delete only their own notes. Agents with the Admin role can delete any note. Requires the |
| retry_messageA | Retry Message
Retries sending a failed message in the specified conversation. Only failed outgoing messages sent by the current agent can be retried. Requires the |
| get_conversationC | Get Conversation
Requires the |
| update_team_assigneeC | Update Team Assignee
Requires the |
| remove_team_assigneeB | Remove Team Assignee
Requires the |
| update_user_assigneeC | Update User Assignee
Requires the |
| remove_user_assigneeC | Remove User Assignee
Requires the |
| update_conversation_assignee_last_seenA | Update Conversation Assignee Last Seen
Marks the conversation as read by the caller, up to the latest message or up to |
| get_messagesC | Get Messages
Requires the |
| get_conversation_participantsB | Get Conversation Participants
Requires the |
| update_conversation_priorityC | Update Conversation Priority
Requires the |
| update_conversation_statusC | Update Conversation Status
Requires the |
| update_conversationtagsB | Update conversation tags
Requires the |
| media_uploadD | Media Upload POST /api/v1/media Tags: Media |
| search_messagesA | Search Messages
Matches messages whose text contains the query. Activity messages are excluded. Returns only messages in conversations the caller can access. Use |
| get_prioritiesC | Get Conversation Priorities GET /api/v1/priorities Tags: Status and priority |
| get_statusesC | Get Conversation Statuses GET /api/v1/statuses Tags: Status and priority |
| create_statusB | Create Conversation Status
Requires the |
| delete_statusA | Delete Conversation Status
Default statuses (Open, Snoozed, Resolved, Closed) and statuses in use cannot be deleted. Requires the |
| update_statusA | Update Conversation Status
Default statuses (Open, Snoozed, Resolved, Closed) cannot be updated. Requires the |
| get_teamsC | Get Teams
Requires the |
| create_teamC | Create Team
Requires the |
| delete_teamB | Delete Team
Requires the |
| get_teamB | Get Team
Requires the |
| update_teamC | Update Team
Requires the |
| get_view_conversationsA | Get View Conversations
Get conversations for a specific view. The view's saved filters are applied. Requires the |
| get_team_unassigned_conversationsB | Get Team Unassigned Conversations
Get conversation assigned to team but not assigned to any agent. Requires the |
| health_checkA | Health Check GET /health Tags: Health |
| export_contactC | Export Contact Data
Requires the |
| update_contact_custom_attributesC | Update Contact Custom Attributes Updates custom attributes of the contact on the conversation. Returns 500 when the request body is not valid JSON. PUT /api/v1/conversations/{uuid}/contacts/custom-attributes Tags: Contacts |
| update_conversation_custom_attributesC | Update Conversation Custom Attributes Returns 500 when the request body is not valid JSON. PUT /api/v1/conversations/{uuid}/custom-attributes Tags: Conversations |
| download_conversation_transcriptB | Download Conversation Transcript
Requires the |
| get_custom_attributesC | List Custom Attributes GET /api/v1/custom-attributes Tags: Custom attributes |
| get_inboxesB | List Inboxes GET /api/v1/inboxes Tags: Inboxes |
| get_public_help_center_articleC | Get Public Help Center Article GET /api/v1/public/help-centers/{slug}/articles/{article_slug} Tags: Help center |
| public_help_center_searchC | Search Public Help Center GET /api/v1/public/help-centers/{slug}/search Tags: Help center |
| get_public_help_center_treeC | Get Public Help Center Tree GET /api/v1/public/help-centers/{slug}/tree Tags: Help center |
| overview_chartsC | Get Overview Charts
Requires the |
| overview_countsC | Get Overview Counts
Requires the |
| overview_csatC | Get Overview CSAT
Requires the |
| overview_message_volumeC | Get Overview Message Volume
Requires the |
| overview_slaC | Get Overview SLA
Requires the |
| overview_tag_distributionC | Get Overview Tag Distribution
Requires the |
| get_tagsC | List Tags Returns tags sorted by name. GET /api/v1/tags Tags: Tags |
| create_tagC | Create Tag
Requires the |
| update_tagC | Update Tag
Requires the |
| delete_tagC | Delete Tag
Requires the |
| serve_mediaA | Serve Media Public media is served without authentication. Private media requires authentication with access to the linked record, or a valid signed URL. Private media not yet attached to a record is served only to the user who uploaded it. GET /uploads/{uuid} Tags: Media |
| mark_conversation_as_unreadA | Mark Conversation As Unread
Marks the conversation as unread for the caller by moving their read position to just before the latest message. Returns 400 when the conversation has no messages. Requires the |
| get_mentioned_conversationsA | Get Mentioned Conversations
Get conversations where the current user, or a team they belong to, was mentioned in a private note. |
| get_contact_page_visitsA | Get Contact Page Visits
Returns the last 20 website pages the conversation's contact visited while the livechat widget was loaded, newest first. Requires the |
| paginated_search_conversationsB | Paginated Search Conversations
Matches conversations whose reference number equals the query or whose contact email contains it, with filters and cursor pagination. An exact reference number match is listed first. Returns only conversations the caller can access. Requires the |
| paginated_search_messagesA | Paginated Search Messages
Matches messages whose text contains the query, with filters and cursor pagination. Activity messages are excluded. Returns only messages in conversations the caller can access. Requires the |
| get_sidebar_countsA | Get Sidebar Counts
Open-conversation counts for the inbox sidebar badges of the caller: assigned, mentioned, unassigned and all, plus one count per view the caller can access (personal views and shared views of the caller's teams). Per-view counts are scan-capped at 100 in the code (the UI shows 99+). Requires the |
| get_all_draftsA | Get All Drafts All unsent reply and private-note drafts saved by the caller, across conversations. Any authenticated agent. GET /api/v1/drafts Tags: Conversations |
| upsert_conversation_draftA | Save Conversation Draft
Saves or updates the caller's draft for a conversation. |
| delete_conversation_draftA | Delete Conversation Draft
Deletes the caller's draft for a conversation. Without |
| apply_macroA | Apply Macro To Conversation
Applies a list of macro actions to a conversation and increments the macro's usage count. The body is a JSON array of actions (not an object), at most one action per type. Allowed action types: assign_team, assign_user, set_status, set_priority, add_tags, set_tags, remove_tags; send_reply and send_private_note are refused (403). The caller needs the permission matching each action type. Answers 200 when every action succeeded, 207 when only some did, and 500 when none did. The success body is |
| get_macrosA | Get Macros
Every macro with its message content and its actions (each action carries |
| get_macros_compactA | Get Macros Compact
Macros without their message content ( |
| search_macrosA | Search Macros The 30 most used macros the caller may apply (visibility all, own, or one of the caller's teams), without their message content, optionally filtered by name and by where they are offered. Any authenticated agent. GET /api/v1/macros/search Tags: Macros |
| get_macroA | Get Macro A single macro with its message content and its actions. Any authenticated agent; the macro's visibility is not checked on this route. GET /api/v1/macros/{id} Tags: Macros |
| get_agents_compactA | Get Agents Compact
Agents and AI assistants in a short form (ID, name, email, enabled, availability), the list the web UI offers when assigning a conversation. Any authenticated agent, unlike |
| get_teams_compactA | Get Teams Compact
Teams in a short form (ID, name, emoji), the list the web UI offers when assigning a conversation. Any authenticated agent, unlike |
| get_automation_rulesA | Get Automation Rules
Automation rules of one type, ordered by weight. Requires the |
| create_automation_ruleA | Create Automation Rule
Creates an automation rule. Requires the |
| get_automation_ruleA | Get Automation Rule
A single automation rule with its conditions and actions, and whether it is enabled. Requires the |
| update_automation_ruleA | Update Automation Rule
Replaces a rule: name, description, type, events, enabled and rules are all overwritten with the body, nothing is merged. Send |
| delete_automation_ruleA | Delete Automation Rule
Permanently deletes a rule. It cannot be undone, and conversations it already acted on keep their changes. To stop a rule without losing it, use |
| toggle_automation_ruleA | Toggle Automation Rule
Flips the |
| get_all_shared_viewsA | Get Shared Views
Every shared view (visible to all agents or to one team), most recently updated first. Personal views are not listed. Requires the |
| create_shared_viewA | Create Shared View
Creates a shared view: a saved filter on the conversation list that appears in the sidebar of every agent ( |
| get_shared_viewA | Get Shared View
A single shared view with its filters. A personal view answers 404. Requires the |
| update_shared_viewA | Update Shared View
Replaces a shared view: name, filters, visibility and team_id are all overwritten with the body, nothing is merged, so read the view first ( |
| delete_shared_viewA | Delete Shared View
Permanently deletes a shared view; the conversations are untouched. It cannot be undone. A personal view answers 404. Requires the |
| get_inboxA | Get Inbox
A single inbox by ID. Passwords, OAuth tokens and client secrets in |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 104 tools
Many near-duplicate tools exist: search_conversations vs paginated_search_conversations, search_messages vs paginated_search_messages, get_agents vs get_agents_compact, get_macros/get_macros_compact/search_macros, and multiple conversation-list endpoints. Descriptions add useful caveats, but an agent can easily misselect, especially with update_status vs update_conversation_status.
Most tools follow a verb_noun snake_case pattern, but there are notable exceptions such as update_conversationtags, media_upload, overview_charts, public_help_center_search, health_check, and ai_completion. The mix of noun-first and verb-first conventions reduces predictability.
With 104 tools, the surface is far beyond a well-scoped MCP tool set and mirrors a large REST API endpoint-by-endpoint. Many tools are granular or overlapping variants, creating an extreme selection burden for an agent.
Core helpdesk coverage is broad: contacts, conversations, messages, teams, agents, tags, statuses, macros, automations, views, and reports are largely covered. Gaps remain, such as inboxes only being list/get with no create/update/delete, contact notes lacking update, and help-center tools being public read-only.