Agents & MCP

MCP server

@cognitiondesk/mcp gives your coding agent the whole platform: create and publish assistants, load knowledge, wire channels, read usage. It runs under your API key, so it can do exactly what that key can do.

128

tools

9

field guides

5

playbooks

Install it locally

In Claude Code, one line:

Shell
claude mcp add cognitiondesk \
  -e COGNITIONDESK_API_KEY=YOUR_API_KEY \
  -- npx -y @cognitiondesk/mcp

In Claude Desktop, Cursor, Windsurf or any other client, add it to the MCP config:

JSON
{
  "mcpServers": {
    "cognitiondesk": {
      "command": "npx",
      "args": ["-y", "@cognitiondesk/mcp"],
      "env": { "COGNITIONDESK_API_KEY": "YOUR_API_KEY" }
    }
  }
}

Then check it:

Shell
$ claude mcp get cognitiondesk
cognitiondesk:
  Scope: Local config (private to you in this project)
  Status: ✔ Connected
  Type: stdio
  Command: npx
  Args: -y @cognitiondesk/mcp

"Connected" means the server started and your key was accepted. Ask your agent to "list my CognitionDesk assistants" and it calls list_assistants.

The key comes from the dashboard, under API keys. Without one the server still starts, and every tool answers with a clear error instead of failing silently. API keys and scopes

Or use the hosted server

The same server speaks Streamable HTTP. Nothing to install: your key travels as a header on every request, and the server keeps no key of its own.

Shell
claude mcp add --transport http cognitiondesk \
  https://mcp.cognitiondesk.com/mcp \
  --header "x-api-key: YOUR_API_KEY"

Authorization: Bearer <key> works too. A request without a key is rejected at initialize with 401, so you find out while configuring the client, not on your first tool call.

Several clients, one server

If you run assistants for several clients, put every key in one server instead of running one server per client:

JSON
{
  "mcpServers": {
    "cognitiondesk": {
      "command": "npx",
      "args": ["-y", "@cognitiondesk/mcp"],
      "env": {
        "COGNITIONDESK_ACCOUNTS": "{\"acme\":\"KEY_FOR_ACME\",\"globex\":\"KEY_FOR_GLOBEX\"}",
        "COGNITIONDESK_ACTIVE_ACCOUNT": "acme"
      }
    }
  }
}
  • get_connection_status lists the accounts the server holds, which one is active and which backend it talks to. It never prints a key.
  • use_account switches the active account for everything that follows.
  • Every read tool takes an optional account argument to look at another client for that one call. Writes always use the active account.
  • Every response starts with account: <name>, so you never read the right answer from the wrong client.

The keyring only exists in local mode. In remote mode each request brings its own key, and an account argument is refused.

Avoid two servers against the same platform: every tool shows up twice, both answer 200, and neither says which account you are in.

Guides and playbooks

The server ships the decisions people get wrong most, so your agent reads them before changing anything. Guides are MCP resources; playbooks are MCP prompts.

Guides (resources)

  • Where each thing goes: prompt, skill, tool or knowledge

    cognitiondesk://guides/donde-va-cada-cosa
  • Draft vs published: which version each channel runs

    cognitiondesk://guides/borrador-y-publicado
  • Who sees what: three systems people mix up constantly

    cognitiondesk://guides/quien-ve-que
  • The assistant's address book: people, channels, rungs and PINs

    cognitiondesk://guides/la-agenda
  • When the assistant must let go and hand off to a human

    cognitiondesk://guides/soltar-a-tiempo
  • What spends money, what has a quota, and how to find out BEFORE

    cognitiondesk://guides/costos-y-limites
  • Notes and files: three stores, and which one each thing goes to

    cognitiondesk://guides/memoria-y-archivos
  • API keys and scopes: the default set, the sensitive ones, and key hygiene

    cognitiondesk://guides/scopes-y-keys
  • Facebook Pages: connect, publish on a cadence, measure

    cognitiondesk://guides/facebook-pages

Playbooks (prompts)

  • Build a new assistant, draft-first

    assistant-nuevo — An assistant is needed for a case not covered today.

  • Add (or fix) a person on the client's team

    alguien-nuevo-en-el-equipo — A team member needs access, or someone already loaded needs a correction.

  • The assistant treats a team member like a stranger

    contesta-como-a-un-desconocido — The client says the assistant answers someone on their team poorly, too little, or "as if it did not know them".

  • Why can't I, and what would fix it

    diagnostico-de-limites — A call failed with 401/403/429, or you are about to do something in bulk and want to know if the plan holds.

  • Take an assistant live, without guessing

    poner-en-produccion — A draft assistant looks ready and the human wants it in front of customers.

Every tool

Generated from the server itself, not written by hand: npm run tools:al-dia fails if this table and @cognitiondesk/mcp drift apart. Descriptions stay in English because that is what your agent reads.

@cognitiondesk/mcp · Version 0.11.1 · 128 tools

Connection & accounts · 4

get_connection_statusCheck the configured API key: masked identity, plan usage, and which assistants it may manage.read-only
list_projectsThe organization's projects (the org → project tenancy structure).read-only
list_scopesEvery permission the platform defines, in one call: agent capabilities (what an ASSISTANT may do inside a chat), API key scopes (what a PROGRAM from outside may do), and the audience rungs (guest/contact/staff/owner).read-only
use_accountSwitch which account of this server's keyring every following tool call uses, until the process restarts or you switch again.

Assistants · 12

assign_workflow_to_assistantAssign (or unassign) a workflow to an assistant.
create_assistantCreate a new assistant.
delete_assistantDelete an assistant permanently.destructive
get_assistantGet a single assistant by id.read-only
get_assistant_accessRead the audience policy of an assistant: audiencePolicy.roleLevels (which business role maps to which rung) and any access gates.read-only
list_assistant_versionsPublished versions of an assistant, newest first, with which one is LIVE.read-only
list_assistantsList all assistants owned by the API key.read-only
publish_assistantFreeze the current draft of an assistant as an immutable version and point the LIVE bot at it.
rollback_assistantPoint the LIVE bot back at an earlier published version, instantly, without touching the draft.
set_assistant_accessReplace the audience policy of an assistant (roleLevels and gates).
try_assistantTalk to an assistant and read what it actually answers.
update_assistantPatch fields on an existing assistant.

Audience & handoff · 9

delete_assistant_contactStop recognising ONE identity of someone.destructive
delete_assistant_personStop recognising a person EVERYWHERE — all their channels at once.destructive
delete_handoff_contactRemove a handoff target.destructive
get_identity_auditWho proved who they are, who tried and failed, and when — the assistant's identity log.read-only
list_assistant_contactsWho the assistant recognises.read-only
list_handoff_contactsThe humans an assistant can hand a customer off to.read-only
upsert_assistant_contactRegister (or update) ONE identity of someone the assistant should recognise.
upsert_assistant_personRegister or edit a PERSON with every way they reach the assistant, in one call.
upsert_handoff_contactAdd or update a handoff target: who receives the customer when the assistant lets go, and through which channel.

Knowledge · 13

delete_knowledge_entryRemove an entry and its chunks from the knowledge base.destructive
estimate_knowledge_ingestPrice an ingest BEFORE doing it: estimated tokens, chunks, and whether it fits the plan's embedding quota.read-only
get_knowledge_entryOne knowledge entry in full: source, training status, whether it is vectorized.read-only
get_knowledge_statsHow much the assistant actually has to answer from: entries, chunks and embeddings.read-only
ingest_knowledge_documentEmbed an ALREADY-UPLOADED document (by its documentId) into the knowledge base.
ingest_knowledge_githubIngest a GitHub repository into the knowledge base.
ingest_knowledge_imageIngest an image into the knowledge base: vision describes it and the description gets embedded, so the assistant can answer questions about what is IN the image.
ingest_knowledge_textWrite something into the knowledge base as text — the fastest way to fix "the assistant does not know X".
ingest_knowledge_urlPull one or more web pages into the knowledge base.
knowledge_maintenanceUnder-the-hood maintenance of the knowledge base — for diagnosing retrieval, not for everyday ingest (that is ingest_knowledge_*).
list_knowledge_entriesWhat is actually in the knowledge base, entry by entry.read-only
search_knowledgeSearch what the assistant knows and has written down — the knowledge base it answers from.read-only
update_knowledge_entryPatch a knowledge entry's metadata (title, description, category, tags).

Skills · 12

create_skillCreate a reusable skill.
delete_skillDelete a custom skill.destructive
export_skillExport a skill as portable JSON — the way a skill travels between accounts (pair with import_skills).read-only
get_skillOne skill in full: its prompt, the tools it carries and where it came from.read-only
import_skillsImport skills from an export payload (see export_skill).
list_builtin_skillsThe platform's built-in skills — registered at startup, read-only.read-only
list_skill_packsCurated skill packs: ready-made bundles for common business types (appointments, e-commerce, CRM...).read-only
list_skillsEvery skill this account can put on an assistant — built-ins plus the org's own, grouped by scope (system / organization / user / imported).read-only
resolve_skillsTurn a list of skillIds into what they ACTUALLY produce: the concrete tools they add and the text they append to the system prompt.read-only
skill_collectionsSkill collections: named groups of skills so a whole capability set is assigned as one thing.
toggle_skillTurn a skill on or off without deleting it — the reversible way to take a behaviour out of circulation while you work out whether it was the cause of something.
update_skillEdit a custom skill.

Custom tools · 5

create_custom_toolCreate a custom tool the assistants can call.
delete_custom_toolDelete a custom tool permanently.destructive
get_custom_toolGet one custom tool by id.read-only
list_custom_toolsList the custom tools owned by the API key.read-only
update_custom_toolPatch a custom tool (displayName, description, config, inputSchema, enabled, minAudience…).

Workflows · 9

create_workflowCreate a workflow (LangGraph node/edge graph).
get_workflowGet a single workflow by id.read-only
get_workflow_analyticsGet run analytics for a workflow.read-only
list_workflow_versionsList published versions of a workflow.read-only
list_workflowsList workflows, optionally filtered by category/tags/enabled.read-only
publish_workflowPublish the current draft of a workflow as an immutable version.
run_workflowRun/test a workflow with an optional input payload.
update_workflowUpdate a workflow draft (name/description/nodes/edges/category/tags — send only the fields to change).
workflow_templatesReusable workflow templates (squads are templates with kind "squad").

Schedules, reports & loops · 7

get_reportFull report by id: signed summary plus the deterministic source it was written over (auditable).read-only
list_reportsReports issued by schedules — every one carries its issue date and its author signature (kind · name · model).read-only
list_schedule_runsRun history of a schedule: status, lateness (said, not hidden), what each run produced.read-only
list_schedulesList scheduled tasks (schedules): status, human-readable "when", next run in the tenant timezone.read-only
manage_loopsLoops: recurring autonomous work items an agent claims and reports on, iteration by iteration.
pause_schedulePause or resume an ACTIVE/PAUSED schedule.
propose_schedulePropose a scheduled task (proactivity check).

Squads · 5

cancel_wizardCancel a wizard session that is stuck or no longer wanted.
create_squadCreate a squad (a team of assistants + an orchestrator workflow) from a one-line goal.
create_squad_from_templateMaterialize a squad from an existing template — faster than create_squad when a suitable template already exists.
get_wizard_statusState of a wizard session (the guided flow behind create_squad): current step, what it already knows, what it is waiting for.read-only
list_squad_templatesList reusable squad templates available to this organization.read-only

Channels & widget · 6

create_web_widgetGive an assistant an embeddable web chat widget — the channel a website visitor talks through.
get_web_widgetOne web widget in full: its allowedDomains, its assistant, whether it is switched on, and its embed key.read-only
list_channel_typesThe channel catalog: which channel types exist, their family, and what each one can render.read-only
list_channelsEvery channel that can reach this account's assistants: connected messaging, embedded web widgets and SDK/code connections.read-only
update_web_widgetEdit a live web widget — above all its allowedDomains, the list that decides whether the chat answers or returns 403.
widget_identityThe web widget's IDENTITY SECRET — lets the site that embeds the widget tell the chat, with a signature, who the visitor is (Intercom-style identity verification).

Social publishing · 11

connect_facebook_pageConnect a Page from list_facebook_pages → `available` (the human already authorized it in Meta).
connect_youtube_channelStart connecting a YouTube channel.
get_facebook_page_insightsFollowers and the page metrics of the last N days (views, reach, engagement, follows), summed and per day.read-only
list_facebook_pagesThe Facebook Pages of this CognitionDesk account: `connected` (usable now, with their connectionId) and `available` (the human already authorized them in Meta but they are not connected yet — connect_facebook_page).read-only
list_facebook_postsWhat a connected Page published (with reactions, comments, shares and permalink) and what is SCHEDULED in Meta and not out yet.read-only
list_social_connectionsThe publishing accounts connected to this CognitionDesk account (YouTube channels; Facebook Pages are listed by list_facebook_pages), plus which networks can be connected from here.read-only
list_youtube_videosThe latest videos of a connected YouTube channel with their privacy, upload status and views/likes/comments.read-only
queue_social_piecePut ONE human-approved piece in the publishing queue (social_pieces) of a brand and network.
schedule_facebook_postPublish on a connected Page: now, SCHEDULED (scheduledAt, 10 minutes to 30 days ahead — Meta's own scheduler, it goes out even if our server is down) or as a hidden draft (published:false).
update_youtube_videoChange a video already on a connected YouTube channel: title, description, tags, privacy, thumbnail.
upload_youtube_videoUpload a video file from THIS machine to a connected YouTube channel, optionally with its thumbnail.

Agenda · 4

agenda_calendar_linkThe agenda as a calendar you subscribe to from Google Calendar, Apple Calendar or Outlook (an iCal link).
get_agendaThe key owner's agenda settings: working hours per weekday, timezone, default duration, minimum notice, how far ahead people can book, appointment types, intake fields — and whether a calendar link (iCal) is active.read-only
list_agenda_appointmentsThe meetings and appointments on the key owner's agenda — who, when (UTC + the agenda's timezone), how long, status, contact details and notes.read-only
update_agendaChange the key owner's agenda: working hours, timezone, default duration, minimum notice, booking window, appointment types.

Inventory · 7

get_import_statusGet the status and report of an inventory import by id ({ status, totalRows, report: { created, updated, skipped, errors } }).read-only
import_inventory_itemsBulk import products/items into the inventory.
list_import_sourcesList configured inventory import sources — external product APIs (the client's own database/endpoint) connected to the inventory.read-only
list_inventoryList the inventory/catalog items (products, services) owned by the API key owner.read-only
list_inventory_importsImport history: every bulk import with its report (created/updated/skipped/errors).read-only
seed_inventorySeed the inventory with starter items for a business type.
sync_import_sourceSync now: fetch all products from a configured external API source and import them (upsert by SKU with the source's saved mapping).

Tasks · 7

create_taskCreate a work item.
delete_taskDelete a task.destructive
get_taskOne task in full, with its assignee and history.read-only
get_tasks_analyticsTask analytics over time: creation/completion trends and distribution.read-only
get_tasks_summaryDeterministic snapshot of the key owner's tasks: counts by status, overdue, due within 48h, stuck in review, and 7-day throughput.read-only
list_tasksThe work items in a scope: personal, project or organization.read-only
update_taskChange a task — status, priority, assignee, anything.

Memory & files · 3

agent_workspaceThe user's personal workspace of notes and saved items: free-form, foldered, searchable.
assistant_filesEach assistant's PRIVATE filesystem: what that agent wrote down while working (notes, drafts, traces), organized in layers.
user_memoryThe structured memory files the platform keeps ABOUT the user (who they are, preferences, business) — what the Copilot has learned.

Email campaigns · 2

create_email_campaign_draftCreate an email campaign as a DRAFT.
list_email_campaignsEmail campaigns of the account, with status.read-only

Images · 1

generate_imageGenerate an image and store it in the account's media.

Receivables · 1

manage_receivablesReceivables (money owed to the account owner): summary, receivable projects, receivables and payments.

Usage & plans · 4

check_action_permissionCheck whether the current plan allows an action before attempting it (e.g.read-only
get_available_plansList available billing plans and their limits.read-only
get_usageGet the current plan and usage/quota snapshot for the API key owner.read-only
get_usage_analyticsGet usage analytics over a period (default 30d).read-only

API keys · 6

create_api_keyCreate a new API key for the same account as the configured key.
delete_api_keyPermanently delete an API key.destructive
get_api_key_statsGet usage stats for a single API key.read-only
list_api_keysList API keys owned by the same account as the configured key.read-only
revoke_api_keyDeactivate an API key (reversible via update_api_key on isActive if ever exposed — today this is one-way in the UI too).destructive
update_api_keyRename a key or change its allowedAssistantIds.

When it answers 403

The tool reached the platform and the platform said no. Two causes, and neither is fixed by editing the assistant:

  • The key lacks the scope. Each tool needs one (assistants:*, knowledge:write…). Create a key with that scope, or ask list_scopes which one it is.
  • PLAN_REQUIRED: the account is on a free plan. The MCP needs Pro or Business.
API keys and scopes

Want to expose one assistant instead?

Each assistant is also its own MCP server with only the tools you granted it. That is a different thing:

One assistant as an MCP server
MCP Server — CognitionDesk Docs