Skip to main content
Glama

libredesk-mcp

npm CI License: MIT

Manage the knowledge base of your LibreDesk helpdesk from the terminal or from an AI assistant such as Claude.

The package ships two things:

  • ldesk, a command line tool for help centers, articles and the knowledge LibreDesk's AI assistants answer from.

  • An MCP server, so Claude and other MCP clients can do the same work for you: draft articles, review FAQ suggestions, or check why an article is not used by your AI assistant.

What you can do

  • Write and edit help center articles in markdown. LibreDesk stores HTML; ldesk converts in both directions.

  • Sync a folder of markdown files to articles. Run it again and only the changed articles are updated.

  • Manage help centers and collections, and publish or unpublish many articles at once.

  • Maintain AI snippets, import a web page as a snippet, and approve or reject FAQ suggestions.

  • See which articles your AI assistants can use, and the reason for each one they can't.

  • Look up the ids of agents, teams, inboxes and other settings, and send a raw request to any other endpoint.

Related MCP server: knowledge-base

Requirements

  • Node.js 22.12 or newer.

  • LibreDesk 2.9.2. Other versions may work; see API coverage.

  • An API key and secret for a LibreDesk agent. The agent's role decides what you can do, for example help_center:manage for articles and ai:manage for snippets.

Install

npm install -g @spaceparrots/libredesk-mcp

Quick start

Log in once. ldesk checks the credentials and stores them as a profile; it asks for the secret without showing it.

ldesk login --url https://helpdesk.example.com --api-key <key>
ldesk status

Then work with your content:

ldesk help-center list
ldesk articles create 3 --title "Reset your password" --content @article.md
ldesk articles set-status 12 --status published
ldesk knowledge snippet create --title "Refunds" --content @refunds.txt

@article.md reads the value from a file. Run ldesk without arguments for an interactive menu, or add --help to any command for its options and examples.

Use it with Claude

Add the server to your MCP client. For Claude Code, run this in your project:

claude mcp add libredesk -- npx -y @spaceparrots/libredesk-mcp serve

For Claude Desktop, or to configure it by hand, add this to claude_desktop_config.json or to .mcp.json in your project:

{
  "mcpServers": {
    "libredesk": {
      "command": "npx",
      "args": ["-y", "@spaceparrots/libredesk-mcp", "serve"]
    }
  }
}

The server uses the login you stored with ldesk login, so the secret stays out of the config file. To pass credentials directly instead, add an env block with LIBREDESK_URL, LIBREDESK_API_KEY and LIBREDESK_API_SECRET. MCP server has all setup variants.

Then ask in plain language, for example:

  • "List the articles in our help center that the AI assistant can't see, and why."

  • "Draft an article about changing the delivery address from this email thread."

  • "Go through the pending FAQ suggestions and approve the ones that are correct."

If the client can't connect, run ldesk doctor in the folder where the client runs. It starts the server the same way the client does and tells you what went wrong.

Safe by default

  • Drafts first. New articles are drafts. Publishing, taking a help center offline, enabling FAQ learning and deleting are separate steps that ask for confirmation.

  • Separate tools for risky actions. Over MCP, publishing and deleting live in their own tools, libredesk_publish and libredesk_delete, so your client can ask you before each one. Edits made with the other tools take effect at once, so editing an already published article changes the live page. See Permissions.

  • Updates keep your data. LibreDesk replaces a whole record on every update. ldesk reads the current record first, so changing a title never resets the content or the AI setting.

  • Secrets stay hidden. The API secret is stored in ~/.libredesk-mcp/config.json (file mode 0600 on macOS and Linux) and is masked in all output.

Documentation

  • CLI reference: logging in, profiles, every command, syncing a folder.

  • MCP server: setup for Claude Code and Claude Desktop, tools, permissions.

  • API coverage: which LibreDesk version is targeted and which endpoints are undocumented.

  • Development: building, testing against a local LibreDesk, adding an endpoint.

Contributing

Bug reports and pull requests are welcome. See CONTRIBUTING.md. To report a security problem, see SECURITY.md.

This project is not affiliated with LibreDesk. Many of the endpoints it uses are not part of LibreDesk's documented API and may change between LibreDesk releases.

License

MIT

Available Tools

8 tools
libredesk_ai_knowledgeA

Manage the snippets AI assistants answer from, and review FAQ suggestions. Undocumented API.

Actions:

  • snippet_list(...): List the snippets AI assistants search, with a short preview.

  • snippet_get(id): Get one snippet with its full content.

  • snippet_create(title, content, ...): Add a snippet: a self-contained answer with a clear title.

  • snippet_update(id, ...): Change only the given fields of a snippet.

  • snippet_import_url(url): Import a web page's readable text as a snippet.

  • faq_list(...): List FAQ suggestions mined from resolved conversations.

  • faq_approve(id, ...): Approve a FAQ suggestion as an enabled snippet, optionally edited.

  • faq_reject(id): Reject a FAQ suggestion without creating a snippet.

  • learning_get(): Show whether FAQ learning is on.

NameRequiredDescriptionDefault
idNoSnippet id. For faq_approve, faq_reject: FAQ suggestion id.
urlNoPage URL; the LibreDesk server fetches it.
titleNoThe customer question or topic, for example "How do I get a refund?".
actionYesAction.
answerNoReplaces the suggested answer; keep it self-contained.
searchNoOnly snippets whose title or content contains this text.
statusNoOnly this status; omit for all.
contentNoPlain text answer, quoted by assistants: self-contained, one topic, full sentences with the details a customer needs (steps, limits, prices, links).
enabledNoLet AI assistants answer from the snippet. For snippet_list: Filter by enabled state.
profileNoStored profile to use; omit for the default.
questionNoReplaces the suggested question.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark the tool as non-read-only but non-destructive, and the description aligns by making clear which actions mutate (create, update, import_url, approve, reject) and that snippet_update changes only given fields. The 'Undocumented API' note is a useful caveat, but nothing is said about permissions, whether rejected/updated data is recoverable, or error behavior — and no annotation-supplied context is extended.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A one-line scope statement followed by a scannable action list where every bullet earns its place by pairing an action with its parameters. Front-loaded and free of filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a nine-action tool with 11 parameters and no output schema, the description covers the action surface and gives brief return hints ('short preview', 'full content', 'show whether FAQ learning is on'). The remaining gap is that the 'Undocumented API' caveat is stated without any guidance on constraints or failure modes across those actions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already defines all 11 parameters; the description still adds real value by mapping parameters to actions (snippet_create(title, content, ...), faq_approve(id, ...), learning_get() with none), which the flat schema cannot express. It marks optional slots with ellipses but does not explain which optional fields each action honors.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb and resource — managing the snippets AI assistants answer from plus reviewing FAQ suggestions — and the action list makes each verb+resource concrete. It falls short of a 5 because it never distinguishes these snippets from the knowledge-base content handled by siblings like libredesk_articles and libredesk_help_center, which is where confusion is most likely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The per-action breakdown (snippet_get for one item's full content vs snippet_list for a preview, faq_approve vs faq_reject, partial update vs create) implies when to pick each action. However there is no explicit guidance on when to use this tool instead of the sibling knowledge/article tools, and no prerequisites or exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

libredesk_articlesA

Manage knowledge base articles, written and read as markdown. Undocumented API.

Actions:

  • list(help_center_id, ...): List a help center's articles, without content.

  • visibility(help_center_id, ...): Which articles AI assistants can use, and why the others are hidden.

  • get(id, ...): Get one article with content and translations.

  • create(collection_id, title, content, ...): Create a draft article in a collection.

  • update(id, ...): Change only the given fields of an article.

  • sync(path, ...): Create or update draft articles from local .md files with frontmatter; writes new ids back. Never publishes.

  • move(id, collection_id): Move an article to another collection of its help center.

  • reorder(collection_id, order): Sort many articles of a collection at once.

  • linkable(help_center_id, exclude_locale): List articles linkable as translation: other locale, not yet linked.

  • link_translation(id, translation_of_id): Make an article a translation of another article.

  • unlink_translation(id): Take an article out of its translation group.

NameRequiredDescriptionDefault
idNoArticle id.
pathNoA .md file, or a folder of them, on this machine.
orderNoMap of article id to position, for example {"11":0,"14":1}.
titleNoArticle title.
actionYesAction.
formatNo"markdown" (default) or "html" for what markdown cannot express, such as tables.
localeNoOnly this locale; omit for all. For create, update: Locale code; must match the collection's locale.
contentNoArticle body. A literal ~ reads back as &#126;; send it back as is.
dry_runNoOnly report what would change.
excerptNoShort summary for lists and search.
profileNoStored profile to use; omit for the default.
ai_enabledNoLet AI assistants use it once published. True by default on create.
meta_titleNoSEO title.
sort_orderNoPosition in the collection, lowest first.
collection_idNoCollection id. For move: Target collection id. For list: Only this collection.
exclude_localeNoLocale of the article to link; articles in it are left out.
help_center_idNoHelp center id.
meta_image_urlNoSocial preview image URL.
meta_descriptionNoSEO description.
translation_of_idNoId of the article this one translates.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false and destructiveHint=false, and the description consistently adds real behavioral nuance beyond that: create makes a 'draft', update changes 'only the given fields', sync 'writes new ids back' and 'Never publishes', linkable filters by locale. This is genuinely useful for a mixed read/write dispatcher. It stops short of stating permission or rate-limit characteristics for the mutating actions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the 'Undocumented API' caveat, then a scannable action list where each entry is a single high-density line. No filler sentences; length is proportional to eleven actions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 20-parameter dispatcher with no output schema, the description covers what each action does and partially what it returns (content vs no content, translations, why articles are hidden). A few return-shape gaps remain — e.g. what list's article summaries contain or what sync reports for skipped files — but nothing that would cause a misinvocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the action list adds context the flat schema cannot: it binds help_center_id to list/visibility/linkable, collection_id to create/move/list, and shows the shape of reorder's order map. It does not mention format or dry_run, though the schema documents both well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource (knowledge base articles, markdown I/O) and then enumerates all eleven actions with a verb+object signature for each, e.g. 'move(id, collection_id): Move an article to another collection of its help center'. An agent can distinguish list vs get vs visibility vs sync without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Each action line explains the condition that selects it: list returns articles 'without content', get returns 'content and translations', visibility reports 'which articles AI assistants can use, and why the others are hidden', sync handles local .md files. What is missing is routing against the siblings — nothing says to use libredesk_publish to publish or libredesk_delete for removal, so the agent must infer that this tool never publishes or deletes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

libredesk_deleteA
DestructiveIdempotent

Delete help centers, collections, articles and snippets. Deletes cannot be undone. Undocumented API.

Actions:

  • help_center_delete(id): Delete a help center. Deletes it with all its collections and articles.

  • collection_delete(help_center_id, id): Delete a collection. Deletes it and its articles.

  • article_delete(id): Delete an article. Deletes the article. Linked translations stay.

  • snippet_delete(id): Delete a snippet. Assistants stop using it.

NameRequiredDescriptionDefault
idNoHelp center id. For collection_delete: Collection id. For article_delete: Article id. For snippet_delete: Snippet id.
actionYesAction.
profileNoStored profile to use; omit for the default.
help_center_idNoHelp center id.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive=true, but the description goes further and names exactly what each delete destroys: a help center takes all its collections and articles, a collection takes its articles, translations survive an article delete, and assistants stop using a snippet. It also flags 'Deletes cannot be undone' and 'Undocumented API', which is information no structured field carries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two front-loaded sentences carry the irreversible and undocumented warnings, followed by a compact action list where every line adds a distinct fact. No sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, undocumented API with no output schema, the description covers irreversibility, cascade scope, and per-action parameters well. What it omits is whether a success response or confirmation is returned and what error behavior to expect when the target is missing or still referenced.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds the pairing the schema does not state: collection_delete consumes both help_center_id and id, while article_delete and snippet_delete take only id. The 'profile' parameter is still unexplained, but the action-to-parameter mapping is a genuine addition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and the exact four resources affected, then breaks each down by action name and effect. An agent can tell immediately this is the destructive counterpart to the sibling help-center/article tools without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Each action line gives a clear condition for choosing it (help_center_delete vs collection_delete vs article_delete vs snippet_delete), which is the real selection problem for a multi-action tool. It stops short of naming when NOT to use it or pointing to siblings like libredesk_help_center for non-delete operations, and states no permission prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

libredesk_help_centerA

Manage help centers and their collections. Undocumented API.

Actions:

  • list(): List all help centers.

  • get(id): Get one help center with all settings and theme.

  • locales(): List the locale codes a help center can use.

  • tree(id, ...): Collections and articles of a help center as a tree, without content.

  • insights(id): Top and zero-result search terms of the public help center.

  • create(name, slug, page_title, ...): Create a help center.

  • update(id, ...): Change only the given settings of a help center.

  • collection_list(help_center_id): List the collections of a help center.

  • collection_create(help_center_id, name, ...): Create a collection in a help center.

  • collection_update(help_center_id, id, ...): Change only the given fields of a collection.

  • collection_reorder(help_center_id, order): Sort many collections at once.

NameRequiredDescriptionDefault
idNoHelp center id. For collection_update: Collection id.
iconNoLucide icon name, for example "rocket".
nameNoHelp center name. For collection_create, collection_update: Collection name.
slugNoURL slug (/hc/<slug>): unique; a-z, 0-9, - and _; not articles, search, api, sitemap.xml.
orderNoMap of collection id to position, for example {"3":0,"5":1}.
themeNoBranding object such as {"color":"#1f93ff"}. Replaces the whole theme: send the full object from get.
actionYesAction.
localeNoLocale code, for example "en". For tree: Only this locale; omit for all.
profileNoStored profile to use; omit for the default.
templateNoPage layout, "classic" by default.
custom_jsNoExtra JavaScript for the public pages.
parent_idNoParent collection id (max 3 levels); null for top level.
custom_cssNoExtra CSS for the public pages.
page_titleNoTitle of the public pages.
sort_orderNoPosition among siblings, lowest first.
descriptionNoShort text under the collection name.
custom_domainNoOwn domain origin such as "https://help.example.com"; "" removes it.
default_localeNoDefault locale code (from locales); "en" when unset.
help_center_idNoHelp center id.
allowed_localesNoLocale codes (from locales) content can use; ones with articles cannot be removed.
meta_descriptionNoSEO description, up to 500 characters.
livechat_inbox_idNoLive chat inbox for the public chat widget; null removes it.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark it readOnlyHint=false / destructiveHint=false, but the tool bundles read actions (list, get, tree, insights) with mutating ones (create, update, collection_reorder) under a single non-readOnly hint, and the description never disambiguates which actions write. It does add useful behavioral detail like 'Change only the given fields' and flags the API as undocumented, but omits side effects such as custom_domain pointing public traffic at a new origin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with a one-line purpose, then a scannable action digest where each bullet earns its place. 'Undocumented API' is a useful caveat, though the ellipses shorten lines at the cost of the parameter-to-action mapping.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-action, 22-parameter tool with no output schema and no per-action schema discrimination, the description underspecifies which optional parameters belong to create versus update versus collection_create. Return shape is only hinted at ('with all settings and theme'), and there is no coverage of mutation side effects or failure modes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline would be 3, but the action signatures (tree(id, ...), collection_reorder(help_center_id, order)) map parameters to the actions that accept them — information the flat schema cannot convey since it has no per-action discrimination. The '...' placeholders leave the full mapping incomplete, keeping it below 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence names the resource domain (help centers and their collections) and the action enumeration makes the tool's scope concrete enough to separate it from libredesk_articles and other siblings. It stops short of explicitly pointing at a sibling for article editing, which is the only missing piece for a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The per-action list implies when each action applies (e.g. tree vs get, collection_reorder vs collection_update), and 'Change only the given settings' signals partial updates. However, there is no explicit guidance on choosing this tool over libredesk_articles or libredesk_lookup, and no stated prerequisites such as needing an existing help center before creating a collection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

libredesk_lookupA
Read-only

Look up ids of agents, teams, inboxes and other settings.

Actions:

  • me(): The API key's agent, with roles and permissions.

  • agents(): List agents (id, name, email). [undocumented]

  • teams(): List teams (id, name). [undocumented]

  • tags(): List conversation tags.

  • inboxes(): List inboxes with channel and enabled state.

  • statuses(): List conversation statuses.

  • priorities(): List conversation priorities.

  • custom_attributes(...): List custom attribute definitions.

NameRequiredDescriptionDefault
actionYesAction.
profileNoStored profile to use; omit for the default.
applies_toNoOnly attributes of this entity; omit for all.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description stays consistent with them. It adds genuine value beyond annotations by disclosing the fields each action returns (id/name/email for agents, channel and enabled state for inboxes), and even flags agents() and teams() as [undocumented], which is honest about known gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single scoping sentence followed by a scannable bulleted action list — front-loaded and free of filler. The [undocumented] tags are slightly unusual self-commentary but they are short and informative rather than noise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so listing the returned fields per action is exactly the compensating detail an agent needs, and it covers six of eight actions fully. The remaining gap is the custom_attributes(...) signature and the role of the profile parameter, both of which the description leaves to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline would be 3, but the schema only labels the action enum as 'Action.' while the description spells out the meaning of all eight enum values and their outputs. It does not explain the profile or applies_to parameters, and the custom_attributes(...) ellipsis leaves its extra arguments unspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb (look up) and resource set (ids of agents, teams, inboxes, settings), and the action list makes the scope concrete. It is clearly distinct from siblings like libredesk_publish, libredesk_delete and libredesk_articles, though it never states that differentiation explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the enumeration of actions rather than stated: an agent can infer it should call this before any id-taking operation, but nothing says when to prefer this over libredesk_articles or libredesk_help_center, and no exclusions or prerequisites are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

libredesk_publishA

Change what customers and AI assistants see: publish articles and collections, take help centers online or offline, switch FAQ learning. Undocumented API.

Actions:

  • help_center_toggle(id): Take a help center online or offline. Changes what the public sees.

  • collection_publish(help_center_id, id, is_published): Publish or unpublish collections. Changes what the public help center shows.

  • article_set_status(id, status): Publish articles or set them back to draft. Publishing makes the article public, and AI-usable when ai_enabled is on.

  • learning_set(enabled): Switch FAQ learning on or off. When enabled is true: Mines resolved conversations with your AI provider, at a cost per conversation.

NameRequiredDescriptionDefault
idNoHelp center id. For collection_publish: Collection id or list of ids. For article_set_status: Article id or list of ids.
actionYesAction.
statusNo"draft" (not public) or "published".
enabledNotrue turns FAQ learning on, false off.
profileNoStored profile to use; omit for the default.
is_publishedNotrue publishes, false unpublishes.
help_center_idNoHelp center id.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a non-read-only, non-idempotent mutation, and the description adds meaningful context: public visibility changes, AI usability coupling, and a per-conversation cost for FAQ learning. It stops short of covering permissions, reversibility of unpublishing, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a high-level purpose and then a compact per-action breakdown, making it easy to scan. Minor redundancy exists, such as repeating that publishing changes what the public sees, and the 'Undocumented API' note is unexplained.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a seven-parameter multi-action tool with no output schema, the description covers all four actions, their parameters, and the important side effects including cost and public visibility. The 'profile' parameter is not mentioned, and array handling for article/collection IDs is left to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents each parameter, including the overloaded 'id'. The description adds value by pairing each action with the parameters it actually uses, clarifying the multi-action dispatch.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence uses specific verbs and resources ('publish articles and collections, take help centers online or offline, switch FAQ learning') and the action list maps each operation precisely. It does not explicitly distinguish this tool from siblings such as libredesk_articles or libredesk_ai_knowledge, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Each action is documented with its effect and the conditions under which it matters, such as publishing making an article public and AI-usable when ai_enabled is on. There is no explicit guidance on when to choose this tool over the related sibling tools, nor any stated exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

libredesk_requestA
Destructive

Raw API access for what other tools lack; find the endpoint with catalog first.

Actions:

  • call(method, path, ...): Send one request. DESTRUCTIVE for DELETE: needs confirm.

  • catalog(...): List known endpoints; with domain, also their fields.

NameRequiredDescriptionDefault
bodyNoJSON request body.
pathNoPath under /api/v1/, such as "/api/v1/help-centers/3".
queryNoQuery parameters.
actionYesAction.
domainNoDomain or tool name, for example "articles".
methodNoHTTP method.
confirmNotrue for DELETE, once the user agreed.
profileNoStored profile to use; omit for the default.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, and the description reinforces this by flagging 'DESTRUCTIVE for DELETE: needs confirm' and tying confirm to prior user agreement — consistent, additive context. It also discloses that catalog with a domain returns field metadata, which is a behavioral detail not in the annotations. It says nothing about auth/profile selection or response shape, keeping it off a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One framing sentence followed by a two-bullet action list; the escape-hatch purpose and the catalog-first workflow are both front-loaded with no filler. Every line maps to something an agent must decide.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter, destructive, nested-object tool with no output schema, the description covers invocation and the delete guardrail but leaves the response shape entirely unexplained — an agent calling catalog or call has no idea what comes back. The profile parameter and its effect on auth are also unaddressed, which is a meaningful gap for a raw-API tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, and the description goes further by binding parameters to actions — method/path/confirm belong to call, domain belongs to catalog and additionally expands the returned field list. That action-scoping is genuine meaning beyond the flat schema, though it never touches body, query, or profile.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource precisely ('raw API access') and enumerates the two verbs it supports (call, catalog), which is enough for an agent to understand this is an escape hatch for endpoints not covered by the dedicated siblings. It stops short of naming any sibling explicitly, relying on the phrase 'what other tools lack' to carry the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'find the endpoint with catalog first' gives an explicit two-step workflow (discover, then call), and 'for what other tools lack' acts as a real exclusion telling the agent to prefer the dedicated tools. It does not say what to do when catalog returns nothing for a domain, but the core routing guidance is present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

libredesk_statusA
Read-only

Show the profile in use and whether its server accepts it, as which agent. Call it on auth, profile or connection errors.

NameRequiredDescriptionDefault
profileNoStored profile to use; omit for the default.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds value beyond that by disclosing what the tool actually reports (active profile, server acceptance of it, agent identity), which is important given there is no output schema. It omits whether the check performs a live network round-trip or how failures are surfaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler; the what-it-reports clause is front-loaded and the trigger condition follows. Minor awkwardness in 'whether its server accepts it, as which agent' costs a point but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-parameter, read-only diagnostic with no output schema, the definition covers the essentials: what is inspected and when to reach for it. It could be stronger by sketching the shape of the result (e.g., profile name, server URL, auth state), but nothing critical to calling it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single 'profile' parameter is fully documented in the schema (100% coverage), including that omitting it uses the default. The description's 'profile in use' gestures at the same concept but adds no syntax, format, or default behavior beyond what the schema already says. Baseline 3 applies when the schema carries the semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Show') plus the exact facts reported: the profile in use, whether its server accepts it, and which agent identity is active. That is clearly a diagnostic/status tool, distinguishable from siblings like libredesk_articles or libredesk_publish, though the phrasing 'as which agent' is slightly ambiguous about what is being reported.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the trigger conditions: 'Call it on auth, profile or connection errors.' That gives an agent a concrete when-to-use rule. It stops short of naming when NOT to call it or pointing to any alternative diagnostic, but no sibling appears to compete for this role.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv0.1.0
    • First observedlibredesk_ai_knowledge
    • First observedlibredesk_articles
    • First observedlibredesk_delete
    • First observedlibredesk_help_center
    • First observedlibredesk_lookup
    • First observedlibredesk_publish
    • First observedlibredesk_request
    • First observedlibredesk_status

TDQS

A3.9/5.0

Scored across 8 tools

Disambiguation4/5

Each tool owns a clear domain (help centers/collections, articles, snippets/FAQ, lookup, publish, delete), and cross-cutting publish/delete operations are separated by intent. The raw request tool overlaps everything, and collection/article lifecycle operations are split across several tools, but the descriptions make the boundaries readable.

Naming Consistency3/5

All names use a consistent libredesk_ snake_case prefix, but the category names mix nouns (help_center, articles, ai_knowledge, lookup, status) and verbs (publish, delete, request). This is readable, but it is not a uniform verb_noun or noun-only pattern.

Tool Count5/5

Eight tools is well within an appropriate range and maps to coherent domains rather than exposing one tool per endpoint. Each bucket earns its place, including lookup, publish/delete separation, and a raw fallback for unsupported operations.

Completeness5/5

The surface covers the full lifecycle for help centers, collections, articles and translations, snippets, FAQ suggestions, and publication/visibility controls. Lookup and raw request provide escape hatches, so there are no obvious dead ends for the apparent knowledge-base and AI-content domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers