MCP / AI
Actions MCP Tools

Actions MCP Tools

Two tools expose the actions domain to MCP clients (Claude Code, Claude Desktop): list_actions and create_action. Implementation: services/mcp/src/lkwiz_mcp/tools/actions.py.

⚠️

This is a partial surface, not a full MCP mirror of the REST API. There is no MCP tool for updating an action, changing status, accepting/declining, deleting, or managing attachments — those operations currently require the web app or the REST API directly. See Deviations from REST for other gaps worth knowing about before you build automation on top of these tools.

list_actions

list_actions(workspace_id: str, status: str = "") -> str

Lists actions in a workspace, optionally filtered by exact status match. Requires the caller to be a member of workspace_id.

Returns (JSON-encoded string):

{
  "actions": [
    {
      "action_id": "a1b2c3d4-...",
      "workspace_id": "ws_123",
      "title": "Create hero graphic",
      "status": "open",
      "assignee_id": "user_456",
      "post_id": "post_789",
      "created_by": "user_111",
      "created_at": "2026-07-17T12:00:00+00:00",
      "updated_at": "2026-07-17T12:00:00+00:00"
    }
  ]
}

The field is post_id here, not linked_post_id — see Deviations from REST. If the action was created through the web app/REST API, post_id will read back as "" even when the action is linked to a post, because this tool never reads linked_post_id.

create_action

create_action(workspace_id: str, title: str, assignee_id: str, post_id: str = "") -> str

Creates an action with status: "open". Requires the caller to be a member of workspace_id — despite the tool catalog table describing this as "WS editor+", the implementation does not check role, only membership.

Returns:

{
  "action_id": "a1b2c3d4-...",
  "workspace_id": "ws_123",
  "title": "Create hero graphic",
  "status": "open",
  "assignee_id": "user_456",
  "created_at": "2026-07-17T12:00:00+00:00"
}
⚠️

assignee_id is not validated — unlike POST /api/actions, this tool will happily create an action assigned to a user who isn't actually a member of the workspace. It also writes a much thinner record than the REST endpoint: no description, priority, due_date, assignee_name, or attachments fields, and it does not send a Slack notification or emit the ActionCreated metric.

Deviations from REST

The MCP tools talk to DynamoDB directly with the raw boto3 client (not the common.db helper the REST actions_service uses) and are implemented independently of it. If you're building automation that mixes both surfaces, be aware of:

REST APIMCP tools
Post link attributelinked_post_idpost_id
Assignee validated as workspace member?Yes (400 if not)No
Record completeness on createFull action recordMinimal subset (see above)
Slack notification / metrics on createYesNo
Update / status / respond / delete / attachmentsFull REST surface — see Actions APINot available via MCP

In practice: use the MCP tools for quick "what's assigned to me" checks and lightweight action creation from an AI client, but drive anything involving status changes, attachments, or reassignment through the REST API.

See also