{
  "data": {
    "tool": {
      "category": "",
      "endpoint": "https://mcp.tasklite.net/mcp",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/tasklite-mcp.json",
      "kind": "mcp",
      "listed": "indexed",
      "liveUrl": "https://www.anchorterminal.com/api/v1/live/tasklite-mcp.json",
      "markdownUrl": "https://www.anchorterminal.com/tools/tasklite-mcp.md",
      "mcpTools": {
        "check": {
          "checker": "anchor-check/1.0",
          "totalTokens": 16008,
          "counts": {
            "error": 0,
            "note": 1,
            "warn": 5
          },
          "findings": [
            {
              "rule": "TC12",
              "severity": "warn",
              "tool": "create_automation",
              "message": "no type for conditions[].value",
              "fix": "Give every parameter a type (or an enum)."
            },
            {
              "rule": "TC12",
              "severity": "warn",
              "tool": "update_automation",
              "message": "no type for conditions[].value",
              "fix": "Give every parameter a type (or an enum)."
            },
            {
              "rule": "TC14",
              "severity": "warn",
              "tool": "query_items",
              "message": "allowed values are in the description, not an enum: excludeStatus",
              "fix": "Move them into enum."
            },
            {
              "rule": "TC18",
              "severity": "warn",
              "tool": "push_status",
              "message": "readOnlyHint is true but the name says \"push\"",
              "fix": "If it changes anything, readOnlyHint must be false."
            },
            {
              "rule": "TC23",
              "severity": "warn",
              "message": "48 tools, about 15,593 tokens of definitions",
              "fix": "Split the server by job, or offer a smaller default toolset (a read-only set, or a search-then-call pattern)."
            },
            {
              "rule": "TC24",
              "severity": "note",
              "message": "48 of 48 tools have no outputSchema",
              "fix": "Declare outputSchema for tools that return structured data, and return structuredContent that matches it."
            }
          ]
        },
        "checkedAt": "2026-10-04T22:25:35Z",
        "count": 48,
        "schemaTokens": 16008,
        "status": "ok",
        "tools": [
          {
            "name": "list_organizations",
            "description": "List the organizations the authenticated user belongs to. Use the returned id as organizationId in other tools.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "properties": {},
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "List organizations"
            }
          },
          {
            "name": "configure_external_access",
            "description": "Read or change how EXTERNAL users (people who sign up to your app through TaskLite auth) get into an organization. They have two ways in, and both obey the policy below: email and password (POST /auth/register-external with this organizationId, then POST /auth/login), or Google (POST /auth/google-external with a Google ID token and this organizationId). Either way the answer carries a token the app sends as Authorization: Bearer on every App API call. registrationPolicy: \"open\", in at once; \"approval\", an organization admin approves each signup (TaskLite mails the admins on every signup, and the person once approved; unapproved users are never billed); \"closed\", invite only, self-signup refused. appLoginUrl: the page of YOUR app where these users log in, it becomes the \"Log in\" button in the approval email, so set it whenever you deploy an app that uses this flow; pass \"\" to clear. Call with no changes to just read the current settings. Requires organization admin.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "appLoginUrl": {
                  "description": "https URL of your app's login page for external users; \"\" clears it",
                  "type": "string"
                },
                "organizationId": {
                  "description": "Defaults to the credential organization",
                  "type": "string"
                },
                "registrationPolicy": {
                  "description": "How external sign-ups are admitted: open, approval or closed",
                  "enum": [
                    "closed",
                    "approval",
                    "open"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Configure external user access"
            }
          },
          {
            "name": "list_projects",
            "description": "List projects in an organization. The API returns 50 per page, an organization with more than that needs page 2 and beyond, so check the returned total before assuming a project does not exist.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "limit": {
                  "description": "Defaults to 50",
                  "type": "number"
                },
                "organizationId": {
                  "description": "Defaults to the credential organization",
                  "type": "string"
                },
                "page": {
                  "description": "1-based; defaults to 1",
                  "type": "number"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "List projects"
            }
          },
          {
            "name": "list_boards",
            "description": "List the boards inside a project, id, name, description. Every other board tool needs a boardId, and this is the only way to discover one without being handed a URL.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "limit": {
                  "description": "Defaults to 50",
                  "type": "number"
                },
                "page": {
                  "description": "1-based; defaults to 1",
                  "type": "number"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                }
              },
              "required": [
                "projectId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "List boards"
            }
          },
          {
            "name": "create_project",
            "description": "Create a project (a business process container). Boards with data live inside projects.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "description": {
                  "description": "Free-text description",
                  "type": "string"
                },
                "name": {
                  "description": "Human-readable name",
                  "type": "string"
                },
                "organizationId": {
                  "description": "Organization id; defaults to the credential organization when omitted",
                  "type": "string"
                }
              },
              "required": [
                "name"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Create project"
            }
          },
          {
            "name": "create_board",
            "description": "Create a board (a data table) inside a project. Add typed columns with create_column afterwards. kind: \"tasks\" (default) also gives the board the built-in task columns, status, priority, assignee, due date, tags, for work people track; \"data\" creates a plain table with only the columns you add, for records such as customers, products or orders (requires a TaskLite server from 2026-09-06; older servers ignore kind).",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "description": {
                  "description": "Free-text description",
                  "type": "string"
                },
                "kind": {
                  "description": "\"tasks\": with the built-in task columns (status, priority, assignee, due date, tags). \"data\": only the columns you add. Default tasks.",
                  "enum": [
                    "tasks",
                    "data"
                  ],
                  "type": "string"
                },
                "name": {
                  "description": "Human-readable name",
                  "type": "string"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                }
              },
              "required": [
                "projectId",
                "name"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Create board"
            }
          },
          {
            "name": "create_column",
            "description": "Add a typed column to a board. Valid types: text, rich_text, number, status, date, datetime, duration, people, checkbox, dropdown, label, priority, link, email, phone, relation, lookup, rollup, formula, rating, currency, file. Choose by meaning, date for dates, phone for phones, number/currency for amounts, dropdown/status (with settings.options as an array of labels) for closed choices; text is for free text only. An obvious name/type mismatch is rejected with the suggested type; pass force:true to override. Rules go in settings.validation: { unique, min, max, minLength, maxLength, pattern, patternMessage }, enforced on every write (UI, MCP, App API). Closed choices (dropdown/status) reject values outside settings.options unless settings.allowCustom is true.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "boardId": {
                  "description": "Board id (from list_boards / create_board)",
                  "type": "string"
                },
                "force": {
                  "description": "Create the column even when the name suggests a different type",
                  "type": "boolean"
                },
                "isRequired": {
                  "description": "Require a non-blank value on every App API create",
                  "type": "boolean"
                },
                "name": {
                  "description": "Human-readable name",
                  "type": "string"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                },
                "settings": {
                  "additionalProperties": {},
                  "description": "Type-specific settings. For dropdown/status/priority: options, either as labels [\"A\",\"B\"] or as full objects [{value,label,color}], labels are expanded server-side, and colors are assigned if you do not supply them.",
                  "type": "object"
                },
                "type": {
                  "description": "Action type: http_request, send_notification, send_email, send_whatsapp, change_status, set_column_value, create_cross_board_item, send_webhook or delay",
                  "type": "string"
                }
              },
              "required": [
                "projectId",
                "boardId",
                "name",
                "type"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Add column"
            }
          },
          {
            "name": "get_board_schema",
            "description": "Get a board with its full column schema (ids, names, types, settings). Call this before creating items with cells.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "boardId": {
                  "description": "Board id (from list_boards / create_board)",
                  "type": "string"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                }
              },
              "required": [
                "projectId",
                "boardId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Read board schema"
            }
          },
          {
            "name": "update_board",
            "description": "Rename a board or change its description. Structure (columns) is changed with update_column / delete_column / reorder_columns.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "boardId": {
                  "description": "Board id (from list_boards / create_board)",
                  "type": "string"
                },
                "description": {
                  "description": "Free-text description",
                  "type": "string"
                },
                "name": {
                  "description": "Human-readable name",
                  "type": "string"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                }
              },
              "required": [
                "projectId",
                "boardId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Update board"
            }
          },
          {
            "name": "delete_board",
            "description": "Delete a board with every item on it. Destructive and not undoable, confirm with the user first, and prefer delete_column when only part of the model is wrong.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "boardId": {
                  "description": "Board id (from list_boards / create_board)",
                  "type": "string"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                }
              },
              "required": [
                "projectId",
                "boardId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Delete board"
            }
          },
          {
            "name": "delete_project",
            "description": "Delete a project with every board, column and row inside it. Destructive: confirm with the user first, and name the project in the confirmation. The project goes to the organization recycle bin, so it can be restored from the admin until it is emptied.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "organizationId": {
                  "description": "Organization id; defaults to the credential organization when omitted",
                  "type": "string"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                }
              },
              "required": [
                "projectId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Delete project"
            }
          },
          {
            "name": "update_column",
            "description": "Change a column after the fact: rename it, change its type (e.g. number -\u003e currency), replace settings (dropdown options), or set isRequired / isHidden. A type change converts existing values (number↔currency, text→number/date/checkbox, anything→text) and clears the ones that cannot convert; the response carries conversion: { converted, cleared }. settings.validation rules apply here too.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "boardId": {
                  "description": "Board id (from list_boards / create_board)",
                  "type": "string"
                },
                "columnId": {
                  "description": "Column id (from get_board_schema)",
                  "type": "string"
                },
                "description": {
                  "description": "Free-text description",
                  "type": "string"
                },
                "force": {
                  "description": "Skip the name/type sanity check",
                  "type": "boolean"
                },
                "isHidden": {
                  "description": "Hide the column in the TaskLite UI",
                  "type": "boolean"
                },
                "isRequired": {
                  "description": "Require a non-blank value on every App API create",
                  "type": "boolean"
                },
                "name": {
                  "description": "Human-readable name",
                  "type": "string"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                },
                "settings": {
                  "additionalProperties": {},
                  "description": "Replaces the column settings, e.g. { options: [...] } for dropdown/status",
                  "type": "object"
                },
                "type": {
                  "description": "New column type (same list as create_column)",
                  "type": "string"
                }
              },
              "required": [
                "projectId",
                "boardId",
                "columnId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Update column"
            }
          },
          {
            "name": "delete_column",
            "description": "Delete a column and every value stored in it. Destructive, confirm with the user first. Use update_column when the column is right but its name, type or options are wrong.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "boardId": {
                  "description": "Board id (from list_boards / create_board)",
                  "type": "string"
                },
                "columnId": {
                  "description": "Column id (from get_board_schema)",
                  "type": "string"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                }
              },
              "required": [
                "projectId",
                "boardId",
                "columnId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Delete column"
            }
          },
          {
            "name": "reorder_columns",
            "description": "Set the display order of a board's columns. Pass every column id in the wanted order (get_board_schema lists them).",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "boardId": {
                  "description": "Board id (from list_boards / create_board)",
                  "type": "string"
                },
                "columnIds": {
                  "description": "Column ids in the new order (every column of the board)",
                  "items": {
                    "type": "string"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                }
              },
              "required": [
                "projectId",
                "boardId",
                "columnIds"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Reorder columns"
            }
          },
          {
            "name": "export_project",
            "description": "The whole project as JSON, boards, columns with settings, items with their cells keyed by column id. For migrations, backups and reading a system back. Items are capped per board for the model's sake; the REST endpoint GET /organizations/{orgId}/projects/{projectId}/export.json returns everything.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "maxItemsPerBoard": {
                  "description": "Default 200",
                  "exclusiveMinimum": 0,
                  "maximum": 2000,
                  "type": "integer"
                },
                "organizationId": {
                  "description": "Defaults to the credential organization",
                  "type": "string"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                }
              },
              "required": [
                "projectId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Export project as JSON"
            }
          },
          {
            "name": "query_items",
            "description": "List items (rows) of a board, including their cell values. Returns all items unless limit/page are given (the API defaults to 50 per page when unpaged, so the tool pages through and concatenates). Narrow the result with search, status, priority and sort instead of fetching everything. This is the admin view; the REST endpoints of a published app take a fuller grammar, filter[column][gte], relation filters, per-field search, see get_app_spec.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "archived": {
                  "description": "Which rows to include. Default active",
                  "enum": [
                    "active",
                    "archived",
                    "all"
                  ],
                  "type": "string"
                },
                "boardId": {
                  "description": "Board id (from list_boards / create_board)",
                  "type": "string"
                },
                "excludeStatus": {
                  "description": "Only rows whose status is NOT one of these, comma separated, resolved like status. The way to ask for everything that is not done: excludeStatus \"done\" (task board) or \"Completed\" (a data board with that option). Rows with no status at all are kept",
                  "type": "string"
                },
                "limit": {
                  "description": "Page size; omit to fetch all items",
                  "exclusiveMinimum": 0,
                  "maximum": 500,
                  "type": "integer"
                },
                "page": {
                  "description": "1-based page, only with limit",
                  "exclusiveMinimum": 0,
                  "type": "integer"
                },
                "priority": {
                  "description": "Only rows with one of these priorities, comma separated (task boards only)",
                  "type": "string"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                },
                "search": {
                  "description": "Free text; matches the row title and its text cells",
                  "type": "string"
                },
                "sort": {
                  "description": "Sort by title, createdAt, updatedAt or status; prefix with \"-\" for descending, e.g. \"-createdAt\" for newest first. Anything else keeps the board order",
                  "type": "string"
                },
                "status": {
                  "description": "Only rows whose status is one of these, comma separated. Matched against the board's status column by option value or label, case-insensitive: \"todo,in_progress\" on a task board, \"Received,In Repair\" on a data board whose status column lists those (get_board_schema shows the options)",
                  "type": "string"
                }
              },
              "required": [
                "projectId",
                "boardId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "List items"
            }
          },
          {
            "name": "create_item",
            "description": "Create an item (row) with all of its data in one call. cells maps columnId -\u003e value (use get_board_schema for column ids); every cell is saved with the row. Use set_cell only for later edits.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "boardId": {
                  "description": "Board id (from list_boards / create_board)",
                  "type": "string"
                },
                "cells": {
                  "additionalProperties": {},
                  "description": "Cell values keyed by column id: { \"\u003ccolumnId\u003e\": value }. Scalars, { amount, currency } for currency, { relatedItemIds: [...] } for relations",
                  "type": "object"
                },
                "description": {
                  "description": "Free-text description",
                  "type": "string"
                },
                "dueDate": {
                  "description": "ISO date",
                  "type": "string"
                },
                "priority": {
                  "description": "Priority: low, medium, high or urgent",
                  "type": "string"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                },
                "status": {
                  "description": "Status value (todo, in_progress, done, or a value from the board's status options)",
                  "type": "string"
                },
                "tags": {
                  "description": "Tags as an array of strings",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "title": {
                  "description": "Item title, shown as the row name",
                  "type": "string"
                }
              },
              "required": [
                "projectId",
                "boardId",
                "title"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Create item"
            }
          },
          {
            "name": "update_item",
            "description": "Update item fields (title, description, status, priority, dueDate, tags).",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "boardId": {
                  "description": "Board id (from list_boards / create_board)",
                  "type": "string"
                },
                "description": {
                  "description": "Free-text description",
                  "type": "string"
                },
                "dueDate": {
                  "description": "Due date, ISO 8601 (YYYY-MM-DD or full timestamp)",
                  "type": "string"
                },
                "itemId": {
                  "description": "Item (row) id",
                  "type": "string"
                },
                "priority": {
                  "description": "Priority: low, medium, high or urgent",
                  "type": "string"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                },
                "status": {
                  "description": "Status value (todo, in_progress, done, or a value from the board's status options)",
                  "type": "string"
                },
                "tags": {
                  "description": "Tags as an array of strings",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "title": {
                  "description": "Item title, shown as the row name",
                  "type": "string"
                }
              },
              "required": [
                "projectId",
                "boardId",
                "itemId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Update item"
            }
          },
          {
            "name": "set_cell",
            "description": "Set a single cell value on an item by columnId.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "boardId": {
                  "description": "Board id (from list_boards / create_board)",
                  "type": "string"
                },
                "columnId": {
                  "description": "Column id (from get_board_schema)",
                  "type": "string"
                },
                "itemId": {
                  "description": "Item (row) id",
                  "type": "string"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                },
                "value": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "null"
                    },
                    {
                      "items": {},
                      "type": "array"
                    },
                    {
                      "additionalProperties": {},
                      "type": "object"
                    }
                  ],
                  "description": "The new cell value; shape depends on the column type"
                }
              },
              "required": [
                "projectId",
                "boardId",
                "itemId",
                "columnId",
                "value"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Set cell value"
            }
          },
          {
            "name": "delete_item",
            "description": "Delete an item. Destructive, confirm with the user before calling.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "boardId": {
                  "description": "Board id (from list_boards / create_board)",
                  "type": "string"
                },
                "itemId": {
                  "description": "Item id (from query_items / create_item)",
                  "type": "string"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                }
              },
              "required": [
                "projectId",
                "boardId",
                "itemId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Delete item"
            }
          },
          {
            "name": "list_comments",
            "description": "List the comments (the correspondence thread) on an item, oldest first. Each comment includes its author and any @mentions. Needs projectId and itemId (get itemId from query_items).",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "itemId": {
                  "description": "Item (row) id",
                  "type": "string"
                },
                "limit": {
                  "description": "Page size, default 20",
                  "exclusiveMinimum": 0,
                  "maximum": 100,
                  "type": "integer"
                },
                "page": {
                  "description": "1-based page, default 1",
                  "exclusiveMinimum": 0,
                  "type": "integer"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                }
              },
              "required": [
                "projectId",
                "itemId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "List item comments"
            }
          },
          {
            "name": "add_comment",
            "description": "Post a comment on an item's thread. To notify people, pass their user ids in mentionedUserIds (each also appears as an @mention). attachmentIds references already-uploaded files. Needs projectId and itemId.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "attachmentIds": {
                  "description": "Ids of already-uploaded attachments to link",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "content": {
                  "description": "The comment text",
                  "type": "string"
                },
                "itemId": {
                  "description": "Item (row) id",
                  "type": "string"
                },
                "mentionedUserIds": {
                  "description": "User ids to @mention and notify",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                }
              },
              "required": [
                "projectId",
                "itemId",
                "content"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Add a comment to an item"
            }
          },
          {
            "name": "update_comment",
            "description": "Edit the text of an existing comment. Only the author can edit their comment. Needs projectId, itemId and the commentId.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "commentId": {
                  "description": "Comment id (from list_comments)",
                  "type": "string"
                },
                "content": {
                  "description": "The new comment text",
                  "type": "string"
                },
                "itemId": {
                  "description": "Item (row) id",
                  "type": "string"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                }
              },
              "required": [
                "projectId",
                "itemId",
                "commentId",
                "content"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Edit a comment"
            }
          },
          {
            "name": "delete_comment",
            "description": "Delete a comment from an item thread. Destructive, confirm with the user before calling. Needs projectId, itemId and the commentId.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "commentId": {
                  "description": "Comment id (from list_comments / add_comment)",
                  "type": "string"
                },
                "itemId": {
                  "description": "Item id (from query_items / create_item)",
                  "type": "string"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                }
              },
              "required": [
                "projectId",
                "itemId",
                "commentId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Delete a comment"
            }
          },
          {
            "name": "request_file_upload",
            "description": "Create a link that puts files onto an item from outside TaskLite: the customer's photos, a signed contract, a logo, a build zip. Returns an address like https://app.tasklite.net/upload/\u003ctoken\u003e that anyone you hand it to can use with no account, no login and no API key; pass clientEmail and TaskLite emails the link for you. What arrives lands as attachments on that item, and list_uploaded_files reads them back with a download URL. This is the answer when the person has the file and the model does not: a hosted client cannot read a folder on someone's machine. The link is public for as long as it lasts, so keep expiryDays short and maxFiles tight, and revoke_upload_link when the material is in.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "clientEmail": {
                  "description": "Send the link to this address. Omit to get the link back and pass it on yourself",
                  "format": "email",
                  "type": "string"
                },
                "clientName": {
                  "description": "Who is being asked, shown on the upload page",
                  "type": "string"
                },
                "clientPhone": {
                  "description": "Recorded with the request",
                  "type": "string"
                },
                "expiryDays": {
                  "description": "How long the link lives. Default 7 days",
                  "maximum": 90,
                  "minimum": 1,
                  "type": "integer"
                },
                "itemId": {
                  "description": "Item (row) the files belong to, from query_items / create_item. Make the row first if the material has no home yet",
                  "type": "string"
                },
                "maxFiles": {
                  "description": "How many files the link accepts before it stops. Default 10",
                  "maximum": 50,
                  "minimum": 1,
                  "type": "integer"
                },
                "message": {
                  "description": "What to upload, in the words the recipient will read: \"the four room photos and the price list\"",
                  "type": "string"
                },
                "organizationId": {
                  "description": "Organization id; defaults to the credential organization when omitted",
                  "type": "string"
                }
              },
              "required": [
                "itemId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false,
              "title": "Create a file upload link"
            }
          },
          {
            "name": "list_uploaded_files",
            "description": "The files attached to an item, including everything that came in through a request_file_upload link, each with a download URL that is signed and short lived (mint a fresh one by calling again). Also lists the upload links on the item and how many files each has taken, which is how to tell whether the person you asked has delivered.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "itemId": {
                  "description": "Item (row) id",
                  "type": "string"
                },
                "organizationId": {
                  "description": "Organization id; defaults to the credential organization when omitted",
                  "type": "string"
                }
              },
              "required": [
                "itemId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "List files on an item"
            }
          },
          {
            "name": "revoke_upload_link",
            "description": "Close an upload link before it expires, so the address stops accepting files. The files already uploaded stay on the item. Use it as soon as the material is in, because until then anyone holding the link can add more.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "organizationId": {
                  "description": "Organization id; defaults to the credential organization when omitted",
                  "type": "string"
                },
                "tokenId": {
                  "description": "Link id (the tokenId from request_file_upload)",
                  "type": "string"
                }
              },
              "required": [
                "tokenId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Revoke a file upload link"
            }
          },
          {
            "name": "create_app",
            "description": "Create an app, a named API surface over the boards of a project, for an external frontend. Then add endpoints and an API key.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "name": {
                  "description": "Human-readable name",
                  "type": "string"
                },
                "organizationId": {
                  "description": "Organization id; defaults to the credential organization when omitted",
                  "type": "string"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                }
              },
              "required": [
                "name",
                "projectId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Create app"
            }
          },
          {
            "name": "push_status",
            "description": "Whether an app can send push notifications to phones, and how many devices are registered. Push goes out through the customer's OWN Firebase project, so it has to be configured once per app before send_push automations do anything. This tool never returns the key.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "appId": {
                  "description": "App id or slug (from list_apps / create_app)",
                  "type": "string"
                },
                "organizationId": {
                  "description": "Organization id; defaults to the credential organization when omitted",
                  "type": "string"
                }
              },
              "required": [
                "appId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Push status"
            }
          },
          {
            "name": "send_test_push",
            "description": "Send one real push notification to the given app users, to prove the chain works before an automation depends on it. Confirm with the user first: this reaches actual phones.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "appId": {
                  "description": "App id or slug (from list_apps / create_app)",
                  "type": "string"
                },
                "body": {
                  "description": "Notification body",
                  "type": "string"
                },
                "organizationId": {
                  "description": "Organization id; defaults to the credential organization when omitted",
                  "type": "string"
                },
                "title": {
                  "description": "Notification title; defaults to \"TaskLite\"",
                  "type": "string"
                },
                "userIds": {
                  "description": "App user ids to notify (the same ids row-level security uses)",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                }
              },
              "required": [
                "appId",
                "userIds"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false,
              "title": "Send a test push"
            }
          },
          {
            "name": "publish_app",
            "description": "Publish an app, required before its API endpoints accept external calls.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "appId": {
                  "description": "App id or slug (from list_apps / create_app)",
                  "type": "string"
                },
                "organizationId": {
                  "description": "Organization id; defaults to the credential organization when omitted",
                  "type": "string"
                }
              },
              "required": [
                "appId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Publish app"
            }
          },
          {
            "name": "create_app_endpoint",
            "description": "Expose a board as a REST endpoint of an app: /apps/{appSlug}/api/{slug}. exposedColumns limits which columns are readable/writable. rowLevelSecurity.enabled makes the endpoint per-user: the developer's server sends `X-App-User: \u003ctheir user id\u003e` next to the API key, and the endpoint returns, updates and deletes ONLY that user's rows (401 without the header). Use it whenever the app has its own users.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "allowedMethods": {
                  "description": "HTTP methods the endpoint accepts: GET, POST, PATCH, DELETE",
                  "items": {
                    "enum": [
                      "GET",
                      "POST",
                      "PATCH",
                      "DELETE"
                    ],
                    "type": "string"
                  },
                  "type": "array"
                },
                "appId": {
                  "description": "App id or slug (from list_apps / create_app)",
                  "type": "string"
                },
                "boardId": {
                  "description": "Board id (from list_boards / create_board)",
                  "type": "string"
                },
                "exposedColumns": {
                  "description": "Columns the endpoint reads and writes, with the JSON key each one gets; without it the endpoint returns bare metadata",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "alias": {
                        "description": "JSON key exposed for this column: letters, digits, underscore. Never one of the reserved item fields id, title, description, status, priority, dueDate, assignedTo, createdAt, updatedAt, order, appUserId, a business status column becomes repairStatus or orderStatus, not status.",
                        "type": "string"
                      },
                      "columnId": {
                        "description": "Column id (from get_board_schema)",
                        "type": "string"
                      },
                      "readOnly": {
                        "description": "Expose the column for reading only; writes to it are refused with 400",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "columnId"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "name": {
                  "description": "Human-readable name",
                  "type": "string"
                },
                "organizationId": {
                  "description": "Organization id; defaults to the credential organization when omitted",
                  "type": "string"
                },
                "rowLevelSecurity": {
                  "additionalProperties": false,
                  "description": "Row-level security. Off: whoever holds the app key reads everything. On: every request must name a signed-in user, and mode decides which rows they reach",
                  "properties": {
                    "enabled": {
                      "description": "true: every request must carry a signed-in user (the token from sign-in, or the app key with X-App-User)",
                      "type": "boolean"
                    },
                    "mode": {
                      "description": "\"owner\" (default): each user sees and edits only the rows they created. \"shared\": every user authorized on the app (listed on it, or an owner/admin of the organization) sees and edits every row; the mode for an admin screen or a team system. \"phone\": a user signed in with a code sent to their phone sees and edits only the rows whose phoneColumn holds that phone, e.g. a directory where each person keeps their own card",
                      "enum": [
                        "owner",
                        "shared",
                        "phone"
                      ],
                      "type": "string"
                    },
                    "phoneColumn": {
                      "description": "mode \"phone\" only: id of the column that holds each row's phone number (get_board_schema)",
                      "type": "string"
                    }
                  },
                  "required": [
                    "enabled"
                  ],
                  "type": "object"
                },
                "slug": {
                  "description": "URL slug: lowercase letters, digits and dashes",
                  "type": "string"
                }
              },
              "required": [
                "appId",
                "boardId",
                "slug",
                "name"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Create app endpoint"
            }
          },
          {
            "name": "list_app_endpoints",
            "description": "List an app's REST endpoints, slug, board, allowed methods, and how many columns each exposes. An endpoint exposing 0 columns is broken: it returns only item metadata and silently discards writes.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "appId": {
                  "description": "App id or slug (from list_apps / create_app)",
                  "type": "string"
                },
                "organizationId": {
                  "description": "Organization id; defaults to the credential organization when omitted",
                  "type": "string"
                }
              },
              "required": [
                "appId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "List app endpoints"
            }
          },
          {
            "name": "update_app_endpoint",
            "description": "Change an existing endpoint, most often to set exposedColumns on one that was created without them. Get the endpoint id from list_app_endpoints and the column ids from get_board_schema.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "allowedMethods": {
                  "description": "HTTP methods the endpoint accepts: GET, POST, PATCH, DELETE",
                  "items": {
                    "enum": [
                      "GET",
                      "POST",
                      "PATCH",
                      "DELETE"
                    ],
                    "type": "string"
                  },
                  "type": "array"
                },
                "appId": {
                  "description": "App id or slug (from list_apps / create_app)",
                  "type": "string"
                },
                "endpointId": {
                  "description": "Endpoint id (from list_app_endpoints)",
                  "type": "string"
                },
                "exposedColumns": {
                  "description": "Replacement list of exposed columns (same shape as create_app_endpoint)",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "alias": {
                        "description": "JSON key exposed for this column: letters, digits, underscore. Never one of the reserved item fields id, title, description, status, priority, dueDate, assignedTo, createdAt, updatedAt, order, appUserId, a business status column becomes repairStatus or orderStatus, not status.",
                        "type": "string"
                      },
                      "columnId": {
                        "description": "Column id (from get_board_schema)",
                        "type": "string"
                      },
                      "readOnly": {
                        "description": "Expose the column for reading only; writes to it are refused with 400",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "columnId"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "isActive": {
                  "description": "Whether it is active",
                  "type": "boolean"
                },
                "name": {
                  "description": "Human-readable name",
                  "type": "string"
                },
                "organizationId": {
                  "description": "Organization id; defaults to the credential organization when omitted",
                  "type": "string"
                },
                "rowLevelSecurity": {
                  "anyOf": [
                    {
                      "additionalProperties": false,
                      "properties": {
                        "enabled": {
                          "description": "true: every request must carry a signed-in user (the token from sign-in, or the app key with X-App-User)",
                          "type": "boolean"
                        },
                        "mode": {
                          "description": "\"owner\" (default): each user sees and edits only the rows they created. \"shared\": every user authorized on the app (listed on it, or an owner/admin of the organization) sees and edits every row; the mode for an admin screen or a team system. \"phone\": a user signed in with a code sent to their phone sees and edits only the rows whose phoneColumn holds that phone, e.g. a directory where each person keeps their own card",
                          "enum": [
                            "owner",
                            "shared",
                            "phone"
                          ],
                          "type": "string"
                        },
                        "phoneColumn": {
                          "description": "mode \"phone\" only: id of the column that holds each row's phone number (get_board_schema)",
                          "type": "string"
                        }
                      },
                      "required": [
                        "enabled"
                      ],
                      "type": "object"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Replacement row-level security (same shape as create_app_endpoint); null turns it off"
                },
                "slug": {
                  "description": "URL slug: lowercase letters, digits and dashes",
                  "type": "string"
                }
              },
              "required": [
                "appId",
                "endpointId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Update app endpoint"
            }
          },
          {
            "name": "create_app_api_key",
            "description": "Create an API key for an app. SECURITY: the key must live server-side only (env var, Next.js API routes), never in browser code. If the app has its own users, the server also sends `X-App-User: \u003cuser id\u003e` with the key so per-user endpoints know who is acting.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "appId": {
                  "description": "App id or slug (from list_apps / create_app)",
                  "type": "string"
                },
                "name": {
                  "description": "Human-readable name",
                  "type": "string"
                },
                "organizationId": {
                  "description": "Organization id; defaults to the credential organization when omitted",
                  "type": "string"
                },
                "scopes": {
                  "description": "Permissions recorded on the key: [\"read\"] or [\"read\",\"write\"]. Omit to match the app: write when any endpoint accepts POST, PATCH or DELETE.",
                  "items": {
                    "enum": [
                      "read",
                      "write"
                    ],
                    "type": "string"
                  },
                  "type": "array"
                }
              },
              "required": [
                "appId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Create app API key"
            }
          },
          {
            "name": "build_backend",
            "description": "Build a whole backend in one call from a spec you compose: the project, its boards, their typed columns (including relations between the boards), optional sample rows, and optionally a published REST API with one endpoint per board and a server-side key. Use it whenever the user describes a system (\"a backend for my repair shop: customers, orders, payments\") instead of calling create_project, create_board, create_column, create_app, publish_app, create_app_endpoint and create_app_api_key one by one. You do the design, pick column types by meaning (phone, date, currency, dropdown/status with options for closed choices), link boards with a relation column (type \"relation\", relatedBoard: \"\u003cboard name in this spec\u003e\", relationType: many_to_one for an order→customer link), and this tool executes it and returns one compact summary. API field names are derived from column names and never collide with reserved item fields, so there is nothing to retry. Boards are created as plain data tables (kind \"data\": only the columns you define, no task fields); set kind \"tasks\" on a board where people track work to do and want status, priority, assignee and due date built in. Every row still has a title.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "api": {
                  "additionalProperties": false,
                  "description": "Include to publish a REST API over every board and mint a key; omit for a boards-only build",
                  "properties": {
                    "methods": {
                      "description": "HTTP methods every endpoint accepts; defaults to all four",
                      "items": {
                        "enum": [
                          "GET",
                          "POST",
                          "PATCH",
                          "DELETE"
                        ],
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "name": {
                      "description": "App name; defaults to \"\u003cproject\u003e API\"",
                      "type": "string"
                    },
                    "rowLevelSecurity": {
                      "description": "true when the app has its own users and each may see only their rows (the caller then sends X-App-User)",
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                },
                "boards": {
                  "description": "The boards (tables) of the backend, in any order",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "columns": {
                        "description": "Typed columns of the board",
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "alias": {
                              "description": "API field name to use instead of the derived one (letters, digits, underscore; not a reserved item field)",
                              "type": "string"
                            },
                            "name": {
                              "description": "Column name as the user would say it, e.g. \"Customer\", \"Phone\", \"Repair Status\"",
                              "type": "string"
                            },
                            "options": {
                              "description": "The closed choices for dropdown/status/priority, e.g. [\"Received\",\"In Repair\",\"Ready\",\"Completed\"]",
                              "items": {
                                "type": "string"
                              },
                              "type": "array"
                            },
                            "relatedBoard": {
                              "description": "relation columns only: the name of another board in this spec that this column links to, e.g. \"Customers\"",
                              "type": "string"
                            },
                            "relationType": {
                              "description": "relation columns only. many_to_one: many rows here point at one row there (an order has one customer; a payment has one order). one_to_many: one row here owns many there. many_to_many: both sides several (a job has several tags). one_to_one: exactly one each way. Defaults to many_to_many, which is rarely what a business model means, say it.",
                              "enum": [
                                "many_to_one",
                                "one_to_many",
                                "many_to_many",
                                "one_to_one"
                              ],
                              "type": "string"
                            },
                            "required": {
                              "description": "Reject API creates that leave it blank",
                              "type": "boolean"
                            },
                            "settings": {
                              "additionalProperties": {},
                              "description": "Other type settings, e.g. { currency: \"ILS\" }. (relatedBoardName / relationType are also accepted here for compatibility.)",
                              "type": "object"
                            },
                            "type": {
                              "description": "text, rich_text, number, currency, date, datetime, phone, email, link, checkbox, dropdown, status, priority, rating, file, people, relation, label, duration",
                              "type": "string"
                            },
                            "validation": {
                              "additionalProperties": {},
                              "description": "{ unique, min, max, minLength, maxLength, pattern, patternMessage }",
                              "type": "object"
                            }
                          },
                          "required": [
                            "name",
                            "type"
                          ],
                          "type": "object"
                        },
                        "minItems": 1,
                        "type": "array"
                      },
                      "description": {
                        "description": "One line on what a row is",
                        "type": "string"
                      },
                      "kind": {
                        "description": "\"data\" (default here): a plain table with only the columns you define, right for customers, products, orders, payments. \"tasks\": also the built-in task columns (status, priority, assignee, due date, tags), only for boards where people track work to do.",
                        "enum": [
                          "tasks",
                          "data"
                        ],
                        "type": "string"
                      },
                      "name": {
                        "description": "Board (table) name, e.g. \"Repair Orders\"",
                        "type": "string"
                      },
                      "rows": {
                        "description": "Optional sample rows keyed by column name, e.g. [{ \"Customer\": \"Sam Miller\", \"Phone\": \"052-555-0142\", \"Price\": 80 }]. \"title\" sets the row title; without it the first plain text value is used, and failing that the row is named after its board and position. A row that other boards reference must carry a title (or a text value) so the reference can be resolved. A relation cell takes the title(s) of rows in the related board (any order in the spec; rows are created in dependency order).",
                        "items": {
                          "additionalProperties": {},
                          "type": "object"
                        },
                        "type": "array"
                      }
                    },
                    "required": [
                      "name",
                      "columns"
                    ],
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "organizationId": {
                  "description": "Organization id; needed only when the account belongs to several (the error then lists them)",
                  "type": "string"
                },
                "project": {
                  "additionalProperties": false,
                  "description": "The project that holds the boards",
                  "properties": {
                    "description": {
                      "description": "One line on what the system is for",
                      "type": "string"
                    },
                    "name": {
                      "description": "Project name, e.g. \"Bike Repair Shop\"",
                      "type": "string"
                    }
                  },
                  "required": [
                    "name"
                  ],
                  "type": "object"
                }
              },
              "required": [
                "project",
                "boards"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Build a backend in one call"
            }
          },
          {
            "name": "create_automation",
            "description": "Create an automation on a board: when something happens, do something. The most useful action here is http_request, which calls an external API and writes the answer back into columns, pair it with the \"scheduled\" trigger and the board keeps itself up to date (prices, exchange rates, shipment status, weather). Triggers: item_created, status_changed, column_value_changed, date_approaching, scheduled. Actions: http_request, send_notification, send_email, change_status, set_column_value, create_cross_board_item, send_webhook. Two more things every action list can use: a { type: \"delay\", config: { minutes | hours | days } } action pauses the run and resumes the actions after it later (reminders, follow-ups); and any network action (http_request, send_webhook, send_email, send_whatsapp) may carry config.retry: { attempts (1-5), delaySeconds (1-60) }. send_webhook accepts config.secret for an HMAC signature. create_cross_board_item copies a new row to another board: config { targetBoardId, title?: \"{{item.title}}\", columnValues: { \"\u003ccolumn id on the TARGET board\u003e\": \"{{\u003ccolumn NAME on this board\u003e}}\" } }; there is no mapping field, and a column left out is not copied. To act only on some rows pass conditions, e.g. [{ field: \"\u003ccolumn id on this board\u003e\", operator: \"equals\", value: \"New seller\" }]. Change an automation later with update_automation; call list_automations first so you do not add a second one that does the same thing.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "actions": {
                  "description": "e.g. [{ type: \"http_request\", config: { url: \"https://api.frankfurter.app/latest?from=USD\u0026to=ILS\", method: \"GET\", responseMapping: [{ path: \"rates.ILS\", columnId: \"\u003ccolumn id from get_board_schema\u003e\" }] } }]",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "config": {
                        "additionalProperties": {},
                        "description": "Action-specific config, e.g. { url, method, headers, responseMapping } for http_request",
                        "type": "object"
                      },
                      "type": {
                        "description": "Column type: text, rich_text, number, status, date, datetime, duration, people, checkbox, dropdown, label, priority, link, email, phone, relation, lookup, rollup, rating, currency, file",
                        "type": "string"
                      }
                    },
                    "required": [
                      "type",
                      "config"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "boardId": {
                  "description": "Board id (from list_boards / create_board)",
                  "type": "string"
                },
                "conditions": {
                  "description": "Run only for rows that match, e.g. [{ field: \"\u003ccolumn id\u003e\", operator: \"equals\", value: \"New seller\" }]",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "field": {
                        "description": "A column id on this board (from get_board_schema), or status, priority, title",
                        "type": "string"
                      },
                      "operator": {
                        "description": "equals, not_equals, contains, not_contains, is_empty, is_not_empty, greater_than, less_than",
                        "type": "string"
                      },
                      "value": {
                        "description": "The value to compare with"
                      }
                    },
                    "required": [
                      "field",
                      "operator"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "isActive": {
                  "description": "Whether it is active",
                  "type": "boolean"
                },
                "name": {
                  "description": "Human-readable name",
                  "type": "string"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                },
                "trigger": {
                  "description": "Event that starts the automation: item_created, status_changed, column_value_changed, date_approaching, or scheduled (cron)",
                  "enum": [
                    "item_created",
                    "status_changed",
                    "column_value_changed",
                    "date_approaching",
                    "scheduled"
                  ],
                  "type": "string"
                },
                "triggerConfig": {
                  "additionalProperties": {},
                  "description": "e.g. { cron: \"0 8 * * *\" } for scheduled, { columnName } for column_value_changed",
                  "type": "object"
                }
              },
              "required": [
                "projectId",
                "boardId",
                "name",
                "trigger",
                "actions"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false,
              "title": "Create automation"
            }
          },
          {
            "name": "update_automation",
            "description": "Change an existing automation: its actions, conditions, trigger config or name, or switch it off with isActive false. Fields left out stay as they are; actions and conditions, when given, replace the whole list. Use it to fix an automation instead of creating a second one next to it. Get the id from list_automations.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "actions": {
                  "description": "The full new list of actions (replaces the old one)",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "config": {
                        "additionalProperties": {},
                        "description": "Action-specific config",
                        "type": "object"
                      },
                      "type": {
                        "description": "Action type, as in create_automation",
                        "type": "string"
                      }
                    },
                    "required": [
                      "type",
                      "config"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "automationId": {
                  "description": "Automation id (from list_automations)",
                  "type": "string"
                },
                "boardId": {
                  "description": "Board id the automation belongs to",
                  "type": "string"
                },
                "conditions": {
                  "description": "Run only for rows that match, e.g. [{ field: \"\u003ccolumn id\u003e\", operator: \"equals\", value: \"New seller\" }]",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "field": {
                        "description": "A column id on this board (from get_board_schema), or status, priority, title",
                        "type": "string"
                      },
                      "operator": {
                        "description": "equals, not_equals, contains, not_contains, is_empty, is_not_empty, greater_than, less_than",
                        "type": "string"
                      },
                      "value": {
                        "description": "The value to compare with"
                      }
                    },
                    "required": [
                      "field",
                      "operator"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "isActive": {
                  "description": "false switches it off, true on",
                  "type": "boolean"
                },
                "name": {
                  "description": "New name",
                  "type": "string"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                },
                "triggerConfig": {
                  "additionalProperties": {},
                  "description": "New trigger config",
                  "type": "object"
                }
              },
              "required": [
                "projectId",
                "boardId",
                "automationId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Update automation"
            }
          },
          {
            "name": "list_automations",
            "description": "List the automations on a board, so you can see what already runs before adding another.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "boardId": {
                  "description": "Board id (from list_boards / create_board)",
                  "type": "string"
                },
                "projectId": {
                  "description": "Project id (from list_projects / create_project)",
                  "type": "string"
                }
              },
              "required": [
                "projectId",
                "boardId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "List automations"
            }
          },
          {
            "name": "list_apps",
            "description": "List the apps in the organization, id, slug, status. Call this first when you need an app id: the slug (app-xxxxxx) is what shows up in URLs and in generated code, and this is how you map it back to the app.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "organizationId": {
                  "description": "Organization id; defaults to the credential organization when omitted",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "List apps"
            }
          },
          {
            "name": "get_app_spec",
            "description": "Get the machine-readable spec of an app: base URL, endpoints, methods, fields, auth. Two formats: \"tasklite\" (default), the compact shape the frontend prompts are built from, and \"openapi\", a standard OpenAPI 3.1 document for developers and other tools. When the user asks for the OpenAPI spec, or wants to hand the API to a developer, pass format \"openapi\". appId accepts either the app UUID or its slug (app-xxxxxx); list_apps shows both. The returned baseUrl is absolute, use it verbatim, do not rebuild it from the admin URL.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "appId": {
                  "description": "App id or slug (from list_apps / create_app)",
                  "type": "string"
                },
                "format": {
                  "description": "\"tasklite\" (default): compact endpoint list. \"openapi\": OpenAPI 3.1 document, every endpoint with typed fields, filter grammar, auth and errors",
                  "enum": [
                    "tasklite",
                    "openapi"
                  ],
                  "type": "string"
                },
                "organizationId": {
                  "description": "Organization id; defaults to the credential organization when omitted",
                  "type": "string"
                }
              },
              "required": [
                "appId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Get app spec"
            }
          },
          {
            "name": "get_frontend_prompt",
            "description": "Get a ready-made prompt describing the app backend, for pasting into a frontend generator (v0/bolt/lovable/cursor). appId accepts the app UUID or its slug (app-xxxxxx), use list_apps to find it.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "appId": {
                  "description": "App id or slug (from list_apps / create_app)",
                  "type": "string"
                },
                "organizationId": {
                  "description": "Organization id; defaults to the credential organization when omitted",
                  "type": "string"
                },
                "tool": {
                  "description": "Target tool the prompt is written for",
                  "enum": [
                    "v0",
                    "bolt",
                    "lovable",
                    "cursor",
                    "claude-code"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "appId",
                "tool"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Get frontend prompt"
            }
          },
          {
            "name": "search",
            "description": "Full-text search across the projects, boards and items of the organization. Returns { results: [{ id, title, url }] }, the shape ChatGPT connectors and deep research expect; pass a result id to fetch for the full record. When you already know the board, query_items is cheaper and complete.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "limit": {
                  "description": "Max results, default 20",
                  "exclusiveMinimum": 0,
                  "maximum": 50,
                  "type": "integer"
                },
                "projectId": {
                  "description": "Limit the search to one project",
                  "type": "string"
                },
                "query": {
                  "description": "Search text",
                  "maxLength": 100,
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "query"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Search projects, boards and items"
            }
          },
          {
            "name": "fetch",
            "description": "One project, board or item in full, by the id search returned (project:\u003cid\u003e, board:\u003cprojectId\u003e:\u003cboardId\u003e, item:\u003cprojectId\u003e:\u003cboardId\u003e:\u003citemId\u003e) or by an app URL path. Returns { id, title, text, url, metadata }, the ChatGPT fetch contract; text is the record as JSON.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "id": {
                  "description": "An id from search, or an app URL path such as /projects/…/boards/…/items/…",
                  "type": "string"
                },
                "organizationId": {
                  "description": "Only needed for project ids when the credential has no default organization; otherwise resolved automatically",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Fetch one record by id"
            }
          },
          {
            "name": "deploy_frontend",
            "description": "Deploy a static frontend to TaskLite hosting and get a live URL https://{slug}.tasklite.dev (HTTPS, auto-published on first deploy, versions kept for rollback_deployment). Hand over the frontend in ONE of three ways: `files`, the files inline (path + content), the way to go from ChatGPT or any hosted client: write index.html and its assets, then deploy in the same turn; `zipUrl`, a public https URL of a zip (a Lovable/Bolt export, a GitHub release asset); `dir`, a build output folder on this machine (only when the MCP runs locally next to the files); `fromAppId`, a version already hosted in the same organization, copied on the server (start a new app from an existing site, or bring an old version back as a new one; get_deployment_files reads a version first). A real build that already exists on the person's machine fits none of these from a hosted server: tell them to drop the zip on the app's Versions screen (the adminUrl of the app, then Versions), which deploys the same way and keeps the same version history. In the frontend, call the app API via relative /api/{endpoint}, the hosting proxy injects the app identity, so no key ships to the browser.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "appId": {
                  "description": "App UUID or slug (app-xxxxxx), see list_apps",
                  "type": "string"
                },
                "dir": {
                  "description": "Local path to the BUILD OUTPUT directory (the one containing index.html), not the project root. Only where the MCP runs on the same machine as the files",
                  "type": "string"
                },
                "files": {
                  "description": "The site files inline. Must include index.html. Up to 500 files / 8MB decoded, right for a frontend written in the conversation",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "content": {
                        "description": "File content. Text as-is; binary as base64 with encoding \"base64\"",
                        "type": "string"
                      },
                      "encoding": {
                        "description": "Default utf8",
                        "enum": [
                          "utf8",
                          "base64"
                        ],
                        "type": "string"
                      },
                      "path": {
                        "description": "Path inside the site, e.g. \"index.html\", \"app.js\", \"css/style.css\"",
                        "type": "string"
                      }
                    },
                    "required": [
                      "path",
                      "content"
                    ],
                    "type": "object"
                  },
                  "maxItems": 500,
                  "type": "array"
                },
                "fromAppId": {
                  "description": "Deploy a version that is already hosted, copied on the server: another app in the same organization (start a new app from it), or this same app (bring an old version back as a new one). Nothing passes through the conversation, so any size works",
                  "type": "string"
                },
                "fromVersion": {
                  "description": "With fromAppId: which version to copy (from list_deployments). Default: the live one",
                  "exclusiveMinimum": 0,
                  "type": "integer"
                },
                "organizationId": {
                  "description": "Organization id; defaults to the credential organization when omitted",
                  "type": "string"
                },
                "zipUrl": {
                  "description": "Public https URL of a zip of the BUILD OUTPUT (index.html at the root, or inside a single top-level folder). Up to 50MB",
                  "format": "uri",
                  "type": "string"
                }
              },
              "required": [
                "appId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false,
              "title": "Deploy frontend to TaskLite hosting"
            }
          },
          {
            "name": "list_deployments",
            "description": "List the hosted-frontend deployments of an app, versions, which one is live, and the public URL.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "appId": {
                  "description": "App id or slug (from list_apps / create_app)",
                  "type": "string"
                },
                "organizationId": {
                  "description": "Organization id; defaults to the credential organization when omitted",
                  "type": "string"
                }
              },
              "required": [
                "appId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "List frontend deployments"
            }
          },
          {
            "name": "get_deployment_files",
            "description": "Read back what a hosted frontend version is made of: every file with its size and its URL on that version, and the full text of the text files (HTML, CSS, JS, JSON, SVG...). This is how a new conversation continues a site an earlier one built: \"take my Krispool site and keep going\" starts here, not from scratch. For a site written by hand the files ARE the source. For a bundled build (Vite, React) the JS is minified output: fine to inspect, not something to edit, so ask for the project's source instead. Images and other binaries come back as URLs only. Text is capped at 512KB per file and 4MB per call; narrow with `paths` for a big site. To start another app from this version, or bring an old version back as a new one, use deploy_frontend with fromAppId.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "appId": {
                  "description": "App id or slug (from list_apps / create_app)",
                  "type": "string"
                },
                "includeContent": {
                  "description": "false lists the files without their text, a cheap first look at a large site. Default true",
                  "type": "boolean"
                },
                "organizationId": {
                  "description": "Organization id; defaults to the credential organization when omitted",
                  "type": "string"
                },
                "paths": {
                  "description": "Only these files, as listed by a previous call, e.g. [\"index.html\", \"css/site.css\"]",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "version": {
                  "description": "Version to read (from list_deployments). Default: the live version",
                  "exclusiveMinimum": 0,
                  "type": "integer"
                }
              },
              "required": [
                "appId"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Read a deployed version's files"
            }
          },
          {
            "name": "rollback_deployment",
            "description": "Point the live URL back at a previous deployment version (see list_deployments for available versions).",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "appId": {
                  "description": "App id or slug (from list_apps / create_app)",
                  "type": "string"
                },
                "organizationId": {
                  "description": "Organization id; defaults to the credential organization when omitted",
                  "type": "string"
                },
                "version": {
                  "description": "Deployment version number (from list_deployments)",
                  "exclusiveMinimum": 0,
                  "type": "integer"
                }
              },
              "required": [
                "appId",
                "version"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": false,
              "title": "Roll back a frontend deployment"
            }
          }
        ]
      },
      "name": "TaskLite",
      "note": "Indexed from the official MCP registry: facts and our own checks, not reviewed, so no score, grade or rank.",
      "packages": [
        {
          "registryType": "npm",
          "identifier": "@tasklite/mcp",
          "version": "0.14.4",
          "transport": "stdio"
        }
      ],
      "pageJsonUrl": "https://www.anchorterminal.com/tools/tasklite-mcp.json",
      "popularity": {
        "githubStars": 0,
        "npmWeekly": 193
      },
      "registryName": "net.tasklite/mcp",
      "remotes": [
        {
          "type": "streamable-http",
          "url": "https://mcp.tasklite.net/mcp"
        }
      ],
      "repository": "https://github.com/shimon-ks/tasklite-mcp",
      "reviewed": false,
      "slug": "tasklite-mcp",
      "source": "the official MCP registry",
      "sourceUrl": "https://registry.modelcontextprotocol.io/v0.1/servers?search=net.tasklite/mcp",
      "summary": "tasklite.net: hosted backend, REST API and admin for apps built by AI agents",
      "updatedAt": "2026-09-16T08:11:13Z",
      "url": "https://www.anchorterminal.com/tools/tasklite-mcp",
      "vendor": "tasklite.net",
      "vendorUrl": "https://tasklite.net/docs",
      "version": "0.14.4",
      "websiteUrl": "https://tasklite.net/docs",
      "where": "both",
      "why": [
        "vendor"
      ]
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/tools/tasklite-mcp",
    "json": "https://www.anchorterminal.com/tools/tasklite-mcp.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/tools/tasklite-mcp.md",
    "slim": "https://www.anchorterminal.com/tools/tasklite-mcp.min.md"
  },
  "markdown": "# TaskLite\n\n\u003e Indexed, not reviewed: facts from the official MCP registry and our own checks. No score, grade or rank, and not in the rankings until the panel reviews it. How the index works: https://www.anchorterminal.com/indexed/\n\n- Kind: MCP server, by tasklite.net (https://tasklite.net/docs)\n- Listed because: It's published in the registry under tasklite.net, a namespace the registry only gives to whoever proves they control that domain.\n- What the official MCP registry says: tasklite.net: hosted backend, REST API and admin for apps built by AI agents\n\n## Facts\n\n- MCP registry: `net.tasklite/mcp` 0.14.4\n- Endpoint: https://mcp.tasklite.net/mcp (streamable HTTP)\n- Package: npm `@tasklite/mcp` (stdio)\n- Source: https://github.com/shimon-ks/tasklite-mcp\n- Website: https://tasklite.net/docs\n- npm downloads a week: 193\n- GitHub stars: 0\n- Registry entry updated: 2026-09-16\n\n## Tools\n\n- Tools it lists (48, about 16,008 tokens of context, `tools/list` without credentials over MCP 2025-11-25, checked 2026-10-04 22:25 UTC):\n  - `list_organizations` (read-only): List the organizations the authenticated user belongs to. Use the returned id as organizationId in other tools.\n  - `configure_external_access` (writes): Read or change how EXTERNAL users (people who sign up to your app through TaskLite auth) get into an organization. They have two ways in, and both obey the…\n  - `list_projects` (read-only): List projects in an organization. The API returns 50 per page, an organization with more than that needs page 2 and beyond, so check the returned total before…\n  - `list_boards` (read-only): List the boards inside a project, id, name, description. Every other board tool needs a boardId, and this is the only way to discover one without being handed…\n  - `create_project` (writes): Create a project (a business process container). Boards with data live inside projects.\n  - `create_board` (writes): Create a board (a data table) inside a project. Add typed columns with create_column afterwards. kind: \"tasks\" (default) also gives the board the built-in task…\n  - `create_column` (writes): Add a typed column to a board. Valid types: text, rich_text, number, status, date, datetime, duration, people, checkbox, dropdown, label, priority, link,…\n  - `get_board_schema` (read-only): Get a board with its full column schema (ids, names, types, settings). Call this before creating items with cells.\n  - `update_board` (writes): Rename a board or change its description. Structure (columns) is changed with update_column / delete_column / reorder_columns.\n  - `delete_board` (writes): Delete a board with every item on it. Destructive and not undoable, confirm with the user first, and prefer delete_column when only part of the model is wrong.\n  - `delete_project` (writes): Delete a project with every board, column and row inside it. Destructive: confirm with the user first, and name the project in the confirmation. The project…\n  - `update_column` (writes): Change a column after the fact: rename it, change its type (e.g. number -\u003e currency), replace settings (dropdown options), or set isRequired / isHidden. A type…\n  - `delete_column` (writes): Delete a column and every value stored in it. Destructive, confirm with the user first. Use update_column when the column is right but its name, type or…\n  - `reorder_columns` (writes): Set the display order of a board's columns. Pass every column id in the wanted order (get_board_schema lists them).\n  - `export_project` (read-only): The whole project as JSON, boards, columns with settings, items with their cells keyed by column id. For migrations, backups and reading a system back. Items…\n  - `query_items` (read-only): List items (rows) of a board, including their cell values. Returns all items unless limit/page are given (the API defaults to 50 per page when unpaged, so the…\n  - `create_item` (writes): Create an item (row) with all of its data in one call. cells maps columnId -\u003e value (use get_board_schema for column ids); every cell is saved with the row.…\n  - `update_item` (writes): Update item fields (title, description, status, priority, dueDate, tags).\n  - `set_cell` (writes): Set a single cell value on an item by columnId.\n  - `delete_item` (writes): Delete an item. Destructive, confirm with the user before calling.\n  - `list_comments` (read-only): List the comments (the correspondence thread) on an item, oldest first. Each comment includes its author and any @mentions. Needs projectId and itemId (get…\n  - `add_comment` (writes): Post a comment on an item's thread. To notify people, pass their user ids in mentionedUserIds (each also appears as an @mention). attachmentIds references…\n  - `update_comment` (writes): Edit the text of an existing comment. Only the author can edit their comment. Needs projectId, itemId and the commentId.\n  - `delete_comment` (writes): Delete a comment from an item thread. Destructive, confirm with the user before calling. Needs projectId, itemId and the commentId.\n  - `request_file_upload` (writes): Create a link that puts files onto an item from outside TaskLite: the customer's photos, a signed contract, a logo, a build zip. Returns an address like…\n  - `list_uploaded_files` (read-only): The files attached to an item, including everything that came in through a request_file_upload link, each with a download URL that is signed and short lived…\n  - `revoke_upload_link` (writes): Close an upload link before it expires, so the address stops accepting files. The files already uploaded stay on the item. Use it as soon as the material is…\n  - `create_app` (writes): Create an app, a named API surface over the boards of a project, for an external frontend. Then add endpoints and an API key.\n  - `push_status` (read-only): Whether an app can send push notifications to phones, and how many devices are registered. Push goes out through the customer's OWN Firebase project, so it has…\n  - `send_test_push` (writes): Send one real push notification to the given app users, to prove the chain works before an automation depends on it. Confirm with the user first: this reaches…\n  - `publish_app` (writes): Publish an app, required before its API endpoints accept external calls.\n  - `create_app_endpoint` (writes): Expose a board as a REST endpoint of an app: /apps/{appSlug}/api/{slug}. exposedColumns limits which columns are readable/writable. rowLevelSecurity.enabled…\n  - `list_app_endpoints` (read-only): List an app's REST endpoints, slug, board, allowed methods, and how many columns each exposes. An endpoint exposing 0 columns is broken: it returns only item…\n  - `update_app_endpoint` (writes): Change an existing endpoint, most often to set exposedColumns on one that was created without them. Get the endpoint id from list_app_endpoints and the column…\n  - `create_app_api_key` (writes): Create an API key for an app. SECURITY: the key must live server-side only (env var, Next.js API routes), never in browser code. If the app has its own users,…\n  - `build_backend` (writes): Build a whole backend in one call from a spec you compose: the project, its boards, their typed columns (including relations between the boards), optional…\n  - `create_automation` (writes): Create an automation on a board: when something happens, do something. The most useful action here is http_request, which calls an external API and writes the…\n  - `update_automation` (writes): Change an existing automation: its actions, conditions, trigger config or name, or switch it off with isActive false. Fields left out stay as they are; actions…\n  - `list_automations` (read-only): List the automations on a board, so you can see what already runs before adding another.\n  - `list_apps` (read-only): List the apps in the organization, id, slug, status. Call this first when you need an app id: the slug (app-xxxxxx) is what shows up in URLs and in generated…\n  - `get_app_spec` (read-only): Get the machine-readable spec of an app: base URL, endpoints, methods, fields, auth. Two formats: \"tasklite\" (default), the compact shape the frontend prompts…\n  - `get_frontend_prompt` (read-only): Get a ready-made prompt describing the app backend, for pasting into a frontend generator (v0/bolt/lovable/cursor). appId accepts the app UUID or its slug…\n  - `search` (read-only): Full-text search across the projects, boards and items of the organization. Returns { results: [{ id, title, url }] }, the shape ChatGPT connectors and deep…\n  - `fetch` (read-only): One project, board or item in full, by the id search returned (project:\u003cid\u003e, board:\u003cprojectId\u003e:\u003cboardId\u003e, item:\u003cprojectId\u003e:\u003cboardId\u003e:\u003citemId\u003e) or by an app URL…\n  - `deploy_frontend` (writes): Deploy a static frontend to TaskLite hosting and get a live URL https://{slug}.tasklite.dev (HTTPS, auto-published on first deploy, versions kept for…\n  - `list_deployments` (read-only): List the hosted-frontend deployments of an app, versions, which one is live, and the public URL.\n  - `get_deployment_files` (read-only): Read back what a hosted frontend version is made of: every file with its size and its URL on that version, and the full text of the text files (HTML, CSS, JS,…\n  - `rollback_deployment` (writes): Point the live URL back at a previous deployment version (see list_deployments for available versions).\n- How its tools read to an agent (0 errors, 5 warnings, 1 note, about 16,008 tokens; rules at https://www.anchorterminal.com/check.md; not part of the score):\n  - warn TC12 create_automation: no type for conditions[].value\n  - warn TC12 update_automation: no type for conditions[].value\n  - warn TC14 query_items: allowed values are in the description, not an enum: excludeStatus\n  - warn TC18 push_status: readOnlyHint is true but the name says \"push\"\n  - warn TC23 server: 48 tools, about 15,593 tokens of definitions\n  - note TC24 server: 48 of 48 tools have no outputSchema\n\n- JSON: https://www.anchorterminal.com/api/v1/tools/tasklite-mcp.json\n- Being indexed says nothing about quality, and nobody can pay for it. Ask for a review: https://www.anchorterminal.com/builders/#claiming\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-04",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Terminal",
        "url": "https://www.anchorterminal.com/tools/"
      },
      {
        "name": "Indexed",
        "url": "https://www.anchorterminal.com/indexed/"
      },
      {
        "name": "TaskLite",
        "url": ""
      }
    ],
    "description": "TaskLite, an MCP server by tasklite.net, listed from the official MCP registry. Indexed, not reviewed: facts and our own checks, no score or ranking. tasklite.net: hosted backend, REST API and admin for apps built by AI agents",
    "facts": [
      "not reviewed",
      "not ranked",
      "facts only"
    ],
    "h1": "TaskLite",
    "image": "https://www.anchorterminal.com/assets/og/indexed.png",
    "path": "/tools/tasklite-mcp",
    "published": "",
    "section": "indexed",
    "title": "TaskLite: MCP server, indexed from the official MCP registry",
    "toc": null,
    "updated": "2026-10-04",
    "url": "https://www.anchorterminal.com/tools/tasklite-mcp"
  },
  "tokens": {
    "markdown": 2700,
    "slim": 2630
  },
  "version": 1
}
