Skip to main content
Glama
LibreDesk MCP

LibreDesk MCP

by Passe12345

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
LIBREDESK_URLYesBase URL of your Libredesk instance, without a trailing slash (for example, http://localhost:9000).
LIBREDESK_API_KEYYesAgent API key from the Libredesk admin UI.
LIBREDESK_API_SECRETYesAgent API secret paired with the API key.
LIBREDESK_MCP_READ_ONLYNoSet to the exact value "true" to register only GET tools and drop write operations. Unset, writes are enabled.
LIBREDESK_MCP_UPLOAD_DIRNoDirectory 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

CapabilityDetails
tools
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_agentsC

Get Agents Requires the users:manage permission. GET /api/v1/agents Tags: Agents

create_agentB

Create Agent Requires the users:manage permission. POST /api/v1/agents Tags: Agents

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 users:manage permission. DELETE /api/v1/agents/{id} Tags: Agents

get_agentC

Get Agent Requires the users:manage permission. GET /api/v1/agents/{id} Tags: Agents

update_agentB

Update Agent Changing the password or disabling the agent signs them out of all sessions. Requires the users:manage permission. PUT /api/v1/agents/{id} Tags: Agents

revoke_api_keyB

Revoke A P I Key Requires the users:manage permission. DELETE /api/v1/agents/{id}/api-key Tags: Agents

generate_api_keyC

Generate A P I Key Requires the users:manage permission. POST /api/v1/agents/{id}/api-key Tags: Agents

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 contacts:read_all permission. GET /api/v1/contacts Tags: Contacts

create_contactB

Create Contact Creates a contact. Either email or phone_number is required. Requires the contacts:write permission. POST /api/v1/contacts Tags: Contacts

search_contactsB

Search Contacts Matches contacts whose email or phone number contains the query. Requires the contacts:read permission. GET /api/v1/contacts/search Tags: Search

get_contactC

Get Contact Requires the contacts:read permission. GET /api/v1/contacts/{id} Tags: Contacts

update_contactC

Update Contact Requires the contacts:write permission. PUT /api/v1/contacts/{id} Tags: Contacts

delete_contactA

Delete Contact Permanently deletes the contact along with their conversations, messages and notes. Requires the contacts:delete permission. DELETE /api/v1/contacts/{id} Tags: Contacts

block_contactB

Block or Unblock Contact Requires the contacts:block permission. PUT /api/v1/contacts/{id}/block Tags: Contacts

get_contact_notesB

Get Contact Notes Requires the contact_notes:read permission. GET /api/v1/contacts/{id}/notes Tags: Contact notes

create_contact_noteB

Create Contact Note Requires the contact_notes:write permission. POST /api/v1/contacts/{id}/notes Tags: Contact notes

delete_contact_noteA

Delete Contact Note Deletes a contact note. Agents without the Admin role can delete only their own notes. Requires the contact_notes:delete permission. DELETE /api/v1/contacts/{id}/notes/{note_id} Tags: Contact notes

create_conversationC

Create Conversation Requires the conversations:write permission. POST /api/v1/conversations Tags: Conversations

get_all_conversationsC

Get all Conversations Requires the conversations:read_all permission. GET /api/v1/conversations/all Tags: Conversations

get_assigned_conversationsB

Get Assigned Conversations Get all assigned conversations to current user. Requires the conversations:read_assigned permission. GET /api/v1/conversations/assigned Tags: Conversations

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 /api/v1/search/conversations for filters and pagination. Requires the conversations:read permission. GET /api/v1/conversations/search Tags: Search

get_unassigned_conversationsA

Get Unassigned Conversations Get all conversations not assigned to any user and team. Requires the conversations:read_unassigned permission. GET /api/v1/conversations/unassigned Tags: Conversations

send_messageB

Send Message Replies require the messages:write permission. Private notes (private: true) require messages:write_private. Messages with sender_type: contact also require messages:write_as_contact. POST /api/v1/conversations/{cuuid}/messages Tags: Conversations

get_messageC

Get Message Requires the messages:read permission. GET /api/v1/conversations/{cuuid}/messages/{uuid} Tags: Conversations

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 messages:write_private permission. DELETE /api/v1/conversations/{cuuid}/messages/{uuid} Tags: Conversations

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 messages:write permission. PUT /api/v1/conversations/{cuuid}/messages/{uuid}/retry Tags: Conversations

get_conversationC

Get Conversation Requires the conversations:read permission. GET /api/v1/conversations/{uuid} Tags: Conversations

update_team_assigneeC

Update Team Assignee Requires the conversations:update_team_assignee permission. PUT /api/v1/conversations/{uuid}/assignee/team Tags: Conversations

remove_team_assigneeB

Remove Team Assignee Requires the conversations:update_team_assignee permission. PUT /api/v1/conversations/{uuid}/assignee/team/remove Tags: Conversations

update_user_assigneeC

Update User Assignee Requires the conversations:update_user_assignee permission. PUT /api/v1/conversations/{uuid}/assignee/user Tags: Conversations

remove_user_assigneeC

Remove User Assignee Requires the conversations:update_user_assignee permission. PUT /api/v1/conversations/{uuid}/assignee/user/remove Tags: Conversations

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 message_uuid. The read position never moves backwards. Requires the conversations:read permission. PUT /api/v1/conversations/{uuid}/last-seen Tags: Conversations

get_messagesC

Get Messages Requires the messages:read permission. GET /api/v1/conversations/{uuid}/messages Tags: Conversations

get_conversation_participantsB

Get Conversation Participants Requires the conversations:read permission. GET /api/v1/conversations/{uuid}/participants Tags: Conversations

update_conversation_priorityC

Update Conversation Priority Requires the conversations:update_priority permission. PUT /api/v1/conversations/{uuid}/priority Tags: Conversations

update_conversation_statusC

Update Conversation Status Requires the conversations:update_status permission. PUT /api/v1/conversations/{uuid}/status Tags: Conversations

update_conversationtagsB

Update conversation tags Requires the conversations:update_tags permission. POST /api/v1/conversations/{uuid}/tags Tags: Conversations

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 /api/v1/search/messages for filters and pagination. Requires the messages:read permission. GET /api/v1/messages/search Tags: Search

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 status:manage permission. POST /api/v1/statuses Tags: Status and priority

delete_statusA

Delete Conversation Status Default statuses (Open, Snoozed, Resolved, Closed) and statuses in use cannot be deleted. Requires the status:manage permission. DELETE /api/v1/statuses/{id} Tags: Status and priority

update_statusA

Update Conversation Status Default statuses (Open, Snoozed, Resolved, Closed) cannot be updated. Requires the status:manage permission. PUT /api/v1/statuses/{id} Tags: Status and priority

get_teamsC

Get Teams Requires the teams:manage permission. GET /api/v1/teams Tags: Teams

create_teamC

Create Team Requires the teams:manage permission. POST /api/v1/teams Tags: Teams

delete_teamB

Delete Team Requires the teams:manage permission. DELETE /api/v1/teams/{id} Tags: Teams

get_teamB

Get Team Requires the teams:manage permission. GET /api/v1/teams/{id} Tags: Teams

update_teamC

Update Team Requires the teams:manage permission. PUT /api/v1/teams/{id} Tags: Teams

get_view_conversationsA

Get View Conversations Get conversations for a specific view. The view's saved filters are applied. Requires the conversations:read permission. GET /api/v1/views/{id}/conversations Tags: Conversations

get_team_unassigned_conversationsB

Get Team Unassigned Conversations Get conversation assigned to team but not assigned to any agent. Requires the conversations:read_team_inbox permission. GET /api/v1/teams/{id}/conversations/unassigned Tags: Conversations

health_checkA

Health Check GET /health Tags: Health

export_contactC

Export Contact Data Requires the contacts:export permission. GET /api/v1/contacts/{id}/export Tags: Contacts

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 messages:read permission. GET /api/v1/conversations/{uuid}/transcript Tags: Conversations

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 reports:manage permission. GET /api/v1/reports/overview/charts Tags: Reports

overview_countsC

Get Overview Counts Requires the reports:manage permission. GET /api/v1/reports/overview/counts Tags: Reports

overview_csatC

Get Overview CSAT Requires the reports:manage permission. GET /api/v1/reports/overview/csat Tags: Reports

overview_message_volumeC

Get Overview Message Volume Requires the reports:manage permission. GET /api/v1/reports/overview/messages Tags: Reports

overview_slaC

Get Overview SLA Requires the reports:manage permission. GET /api/v1/reports/overview/sla Tags: Reports

overview_tag_distributionC

Get Overview Tag Distribution Requires the reports:manage permission. GET /api/v1/reports/overview/tags Tags: Reports

get_tagsC

List Tags Returns tags sorted by name. GET /api/v1/tags Tags: Tags

create_tagC

Create Tag Requires the tags:manage permission. POST /api/v1/tags Tags: Tags

update_tagC

Update Tag Requires the tags:manage permission. PUT /api/v1/tags/{id} Tags: Tags

delete_tagC

Delete Tag Requires the tags:manage permission. DELETE /api/v1/tags/{id} Tags: Tags

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 conversations:read permission. PUT /api/v1/conversations/{uuid}/mark-unread Tags: Conversations

get_mentioned_conversationsA

Get Mentioned Conversations Get conversations where the current user, or a team they belong to, was mentioned in a private note. mentioned_message_uuid on each item points to the mention. Requires the conversations:read permission. GET /api/v1/conversations/mentioned Tags: Conversations

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 conversations:read permission. GET /api/v1/conversations/{uuid}/page-visits Tags: Conversations

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 conversations:read permission. GET /api/v1/search/conversations Tags: Search

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 messages:read permission. GET /api/v1/search/messages Tags: Search

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 conversations:read permission. GET /api/v1/conversations/sidebar-counts Tags: Conversations

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. type defaults to reply. The request is rejected with 400 when content is blank and meta is empty or {}, and when meta is larger than 32 KB. The caller must have access to the conversation. POST /api/v1/conversations/{uuid}/draft Tags: Conversations

delete_conversation_draftA

Delete Conversation Draft Deletes the caller's draft for a conversation. Without type, drafts of every type are deleted. The handler does not check conversation access: it only touches the caller's own drafts. DELETE /api/v1/conversations/{uuid}/draft Tags: Conversations

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 {"message": ...}, not the usual status/data envelope. POST /api/v1/conversations/{uuid}/macros/{id}/apply Tags: Conversations

get_macrosA

Get Macros Every macro with its message content and its actions (each action carries display_value, the name of the team, agent, status or priority it targets). Any authenticated agent. Use search_macros to list only the macros the caller may apply, or get_macros_compact for a list without the message content. GET /api/v1/macros Tags: Macros

get_macros_compactA

Get Macros Compact Macros without their message content (has_message_content tells whether there is one), filtered by name, newest update first. Without page_size (or with 0) every match is returned. Requires the macros:manage permission. GET /api/v1/macros/compact Tags: Macros

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_agents which needs users:manage. Use the returned id as assignee_id of update_user_assignee. GET /api/v1/agents/compact Tags: Agents

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_teams which needs teams:manage. Use the returned id as assignee_id of update_team_assignee. GET /api/v1/teams/compact Tags: Teams

get_automation_rulesA

Get Automation Rules Automation rules of one type, ordered by weight. Requires the automations:manage permission. Pass type: a rule list is always read per type (an empty or unknown type returns an empty list, not every rule). GET /api/v1/automations/rules Tags: Automations

create_automation_ruleA

Create Automation Rule Creates an automation rule. Requires the automations:manage permission. The rule is ENABLED as soon as it is created (the table default) and starts applying to the next matching conversation; use toggle_automation_rule to disable it. The server does not validate the content of rules: a malformed rule is stored and then silently never matches, so read it back with get_automation_rule. Example, assign every new conversation whose subject contains a text to agent 5: type new_conversation, events [], rules [{"group_operator":"AND","groups":[{"logical_op":"AND","rules":[{"field":"subject","field_type":"conversation","operator":"contains","value":"Company switched from","case_sensitive_match":false}]}],"actions":[{"type":"assign_user","value":["5"]}]}]. POST /api/v1/automations/rules Tags: Automations

get_automation_ruleA

Get Automation Rule A single automation rule with its conditions and actions, and whether it is enabled. Requires the automations:manage permission. GET /api/v1/automations/rules/{id} Tags: Automations

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 enabled explicitly: leaving it out stores false and disables the rule. Read the rule first (get_automation_rule) and resend every field. The server does not validate the content of rules. Requires the automations:manage permission. PUT /api/v1/automations/rules/{id} Tags: Automations

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_rule. Requires the automations:manage permission. DELETE /api/v1/automations/rules/{id} Tags: Automations

toggle_automation_ruleA

Toggle Automation Rule Flips the enabled flag of a rule (enabled becomes disabled and the reverse) and returns the updated rule. There is no body and no way to set the state explicitly, so read the rule first if the current state matters. Requires the automations:manage permission. PUT /api/v1/automations/rules/{id}/toggle Tags: Automations

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 shared_views:manage permission. GET /api/v1/shared-views Tags: Views

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 (visibility all) or of the members of one team (visibility team with team_id). Requires the shared_views:manage permission. The filters are validated: an unknown field is refused. Editing and deleting a view stay in the web UI. Example, the open conversations carrying tag 3: {"name":"Compromise alerts","visibility":"all","filters":{"logic":"AND","rules":[{"model":"conversations","field":"tags","operator":"contains","value":"[3]"},{"model":"conversations","field":"status_id","operator":"not equals","value":"4"}]}}. POST /api/v1/shared-views Tags: Views

get_shared_viewA

Get Shared View A single shared view with its filters. A personal view answers 404. Requires the shared_views:manage permission. GET /api/v1/shared-views/{id} Tags: Views

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 (get_shared_view) and resend every field. A personal view answers 404. Requires the shared_views:manage permission. PUT /api/v1/shared-views/{id} Tags: Views

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 shared_views:manage permission. DELETE /api/v1/shared-views/{id} Tags: Views

get_inboxA

Get Inbox A single inbox by ID. Passwords, OAuth tokens and client secrets in config are masked. Unlike the inbox list, this route requires the inboxes:manage permission. GET /api/v1/inboxes/{id} Tags: Inboxes

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

C2.6/5.0

Scored across 104 tools

Disambiguation2/5

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.

Naming Consistency3/5

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.

Tool Count1/5

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.

Completeness4/5

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.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues