Talandor
Public MCP report

TaScan

https://app.tascan.io/mcp

Official Registry

Official Registry · io.github.snowbikemike/tascan-mcp · Publisher: io.github.snowbikemike

Last observed

Usable now
Can I use it?

Usable now

A public MCP contract was observed. Add the endpoint to a compatible client below. A Watch can alert you if this contract changes.

https://app.tascan.io/mcp
Tools79
AuthNo authentication challenge observed
Protocol2025-11-25
EvidencePublic contract observed
Latency10822 ms

See the measured evidence

Client fit

Compatibility is inferred from published configuration rules and is not manually verified in each client.

Claude
Observed 2025-11-25.
Likely compatible · inferred
Cursor
Streamable HTTP and public HTTPS were observed.
Likely compatible · inferred
ChatGPT
Public tool names, descriptions and schemas were observed. Plan and workspace access still apply.
Likely compatible · inferred
VS Code
Public remote HTTP configuration can be assessed.
Likely compatible · inferred
Generic MCP
Observed 2025-11-25.
Likely compatible · inferred
Show compatibility evidence

Rule evidence: Remote HTTPS rule v0.2 · reviewed 2026-09-12 · Remote HTTP rule v0.2 · reviewed 2026-09-12 · Remote app rule v0.2 · reviewed 2026-09-12 · Protocol and transport rule v0.2 · reviewed 2026-09-12

What changed

Public contract stable since
Last compared · No semantic contract change since the previous complete snapshot.
Info
tascan_create_zone changed its input schema
· warning · medium confidence · tascan_create_zone · Rule: input-schema-changed
Warning
tascan_update_zone changed its input schema
· warning · medium confidence · tascan_update_zone · Rule: input-schema-changed
Warning

A Watch would alert only if this change may affect the selected client.

Show 1 quieter observation
tascan_create_cycle added an optional input field reviews
· info · high confidence · tascan_create_cycle · Rule: optional-input-added
Info
Evidence and limitations

Method: anonymous Streamable HTTP probe. We never invoke a tool.

Attempted protocols: 2026-07-28, 2025-11-25

Protocol2025-11-25
TransportStreamable HTTP
AuthNo authentication challenge observed
EvidencePublic contract observed
Total latency10822 ms
Response bytes81806

No diagnostic errors.

Server-provided content. Tool names, descriptions and schemas below are copied from the MCP server. They may be in another language. Talandor does not translate or verify them.
Tools and declared exposure

Server annotations are declarations, not verified behavior.

Show 79 of 79 server-provided tool definitions
tascan_add_subtasks
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Add one or more subtasks to a task (bulk). Subtasks support typed responses: "number" for per-set data (reps, weight, distance), "text" for notes, "choice" for options, "checkbox" for simple steps. Set-logging example: task "Bench Press" with subtasks Set 1/Set 2/Set 3 each response_type "number" — each completed set stores its value and timestamp, giving per-set timing for progression tracking.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "subtasks",
    "task_id"
  ],
  "properties": {
    "task_id": {
      "type": "string",
      "description": "Parent task ID"
    },
    "subtasks": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "title"
        ],
        "properties": {
          "title": {
            "type": "string",
            "description": "Subtask title (e.g. \"Set 1\")"
          },
          "sort_order": {
            "type": "number",
            "description": "Explicit position (defaults to end, in array order)"
          },
          "description": {
            "type": "string",
            "description": "Optional detail"
          },
          "response_type": {
            "enum": [
              "checkbox",
              "number",
              "text",
              "choice"
            ],
            "type": "string",
            "description": "Default checkbox. \"number\" for per-set values. \"choice\" needs response_config.options."
          },
          "requires_photo": {
            "type": "boolean",
            "description": "Require photo on completion"
          },
          "response_config": {
            "type": "object",
            "description": "For \"choice\": {options: [...]}. For \"number\"/\"text\": {placeholder}."
          }
        }
      },
      "description": "Array of subtasks to create"
    }
  }
}
tascan_add_tasks
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Add one or more tasks to an event (task list). Supports bulk creation. IMPORTANT: Set response_type correctly — use "text" for info collection (names, phones, emails, notes), "photo" for visual verification (inspections, serial numbers, damage checks), "checkbox" only for simple confirmations. NOTE: To dispatch tasks to an AI agent use tascan_dispatch_to_agent instead. Writing into an agent inbox list requires the agent:dispatch permission (agent:dispatch:code for CODE:/SHELL: titles) — without it the call is refused.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "list_id",
    "tasks"
  ],
  "properties": {
    "tasks": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "title"
        ],
        "properties": {
          "title": {
            "type": "string",
            "description": "Task title"
          },
          "subtasks": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "description": "Subtask title (e.g. \"Set 1\")"
                },
                "response_type": {
                  "enum": [
                    "checkbox",
                    "number",
                    "text",
                    "choice"
                  ],
                  "type": "string",
                  "description": "Typed subtask response. \"number\" for per-set values (reps/weight), \"text\" for notes, \"choice\" needs response_config.options. Default checkbox."
                },
                "requires_photo": {
                  "type": "boolean"
                },
                "response_config": {
                  "type": "object",
                  "description": "Same shape as task response_config"
                }
              }
            },
            "description": "Subtasks created with the task. Example set logging: [{title:\"Set 1\",response_type:\"number\"},{title:\"Set 2\",response_type:\"number\"},{title:\"Set 3\",response_type:\"number\"}]"
          },
          "sort_order": {
            "type": "number",
            "description": "Explicit sort position (defaults to end of list, in array order)"
          },
          "assigned_to": {
            "type": "string",
            "description": "Worker to assign this task to — pass the worker UUID (validated against your org and stored as the worker's name, which is how the worker portal matches \"my tasks\"). A plain name string is also accepted as-is."
          },
          "description": {
            "type": "string",
            "description": "Task description"
          },
          "response_type": {
            "enum": [
              "checkbox",
              "photo",
              "text",
              "number",
              "date",
              "choice"
            ],
            "type": "string",
            "description": "CRITICAL: \"text\" for names, phones, emails, notes, addresses, any free-form input. \"photo\" for tasks needing photographic proof (inspections, serial numbers, packed cases). \"checkbox\" ONLY for simple yes/no confirmations. \"number\" for numeric values. \"date\" for dates. \"choice\" for multiple-choice (needs response_config.options). Most info-collection tasks should be \"text\", most verification tasks should be \"photo\"."
          },
          "requires_photo": {
            "type": "boolean",
            "description": "Require photo on completion"
          },
          "response_config": {
            "type": "object",
            "description": "Response configuration. For \"choice\": {options: [\"A\",\"B\",\"C\"]}. For \"text\": {placeholder, multiline}. For \"number\": {placeholder}. For \"date\": {label, include_text}."
          },
          "required_equipment": {
            "type": "string",
            "description": "Equipment this task depends on (free text, e.g. \"88 lb kettlebells\")"
          },
          "is_safety_checkpoint": {
            "type": "boolean",
            "description": "Safety-critical task flag"
          }
        }
      },
      "description": "Array of tasks to create"
    },
    "list_id": {
      "type": "string",
      "description": "Task list (event) ID"
    }
  }
}
tascan_analyze_issue
Declared idempotent
Show server-provided details
Server description (copied; language not verified)
Step 1 of the Closed-Loop Autonomous Operations Protocol. Retrieves full issue context including worker info, message thread, project history, and recent similar issues. Use this data to reason about the root cause and generate a remediation plan. Also supports server-side AI analysis via POST (calls Anthropic API directly).
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "issue_id"
  ],
  "properties": {
    "issue_id": {
      "type": "string",
      "description": "Issue ID to analyze"
    },
    "server_side_ai": {
      "type": "boolean",
      "description": "If true, the server calls Anthropic API directly for AI analysis (default: false — returns raw data for MCP client to analyze)"
    }
  }
}
tascan_apply_template
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Apply a pre-built template to a task list, adding all template tasks
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "list_id",
    "template_slug"
  ],
  "properties": {
    "list_id": {
      "type": "string",
      "description": "Task list (event) ID"
    },
    "template_slug": {
      "type": "string",
      "description": "Template slug (e.g. \"conference-load-in\", \"warehouse-receiving\")"
    }
  }
}
tascan_assess_condition
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Run an AI condition assessment of an asset from a photo. The model scores 0-100 with the asset's full assessment history in context, so it reads degradation over time — returning the Condition Delta Score vs the previous assessment, defects, wear indicators, maintenance recommendations, and a degradation trajectory. Sensor-free predictive maintenance.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "asset_id",
    "photo_url"
  ],
  "properties": {
    "asset_id": {
      "type": "string",
      "description": "Asset ID (from tascan_register_asset or tascan_list_assets)"
    },
    "photo_url": {
      "type": "string",
      "description": "Public URL of the assessment photo"
    },
    "worker_name": {
      "type": "string",
      "description": "Who took the photo (optional)"
    }
  }
}
tascan_auto_resolve
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
FULL Closed-Loop Autonomous Operations Protocol in one call. Server-side AI analyzes the issue, generates remediation tasks, creates a task list, and dispatches to the worker — all without human intervention. This executes Patent Claim 7: autonomous operations from issue detection through physical-world instruction delivery.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "issue_id"
  ],
  "properties": {
    "issue_id": {
      "type": "string",
      "description": "Issue ID to auto-resolve"
    }
  }
}
tascan_cancel_scheduled_sms
Declared destructive
Show server-provided details
Server description (copied; language not verified)
Cancel a scheduled text that has not been sent yet (status pending). A row already sending, sent, failed or cancelled is refused (409) — a sent text cannot be recalled.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "The scheduled_sms row id from tascan_schedule_sms / tascan_list_scheduled_sms"
    }
  }
}
tascan_complete_subtask
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Complete a subtask, optionally recording a typed response_value (e.g. the weight or reps for that set). Each completion is timestamped, so consecutive set completions yield per-set durations. Returns progress including all_subtasks_complete — when true, complete the parent task with tascan_complete_task.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "subtask_id"
  ],
  "properties": {
    "notes": {
      "type": "string",
      "description": "Optional notes"
    },
    "worker_id": {
      "type": "string",
      "description": "Worker performing the completion (optional)"
    },
    "subtask_id": {
      "type": "string",
      "description": "Subtask ID to complete"
    },
    "response_value": {
      "type": "string",
      "description": "Typed response value (for number/text/choice subtasks), e.g. \"165\""
    }
  }
}
tascan_complete_task
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Complete an ORDINARY task on behalf of a worker. Inserts a completion record and timer event. Use this to simulate or record task completions via the API. Coordination-cycle tasks (a CODE:/REVIEW: build or review, a Decision / Question / Integrate / Parked card on a project Decisions list — tasks that carry `coord`) are refused with 403 for every key tier: builds and reviews are completed by their runner, decisions only by the human on the worker page.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "task_id",
    "worker_id"
  ],
  "properties": {
    "notes": {
      "type": "string",
      "description": "Optional completion notes"
    },
    "task_id": {
      "type": "string",
      "description": "Task ID to complete"
    },
    "worker_id": {
      "type": "string",
      "description": "Worker ID performing the completion"
    },
    "response_value": {
      "type": "string",
      "description": "Response value (for text/number/choice tasks)"
    }
  }
}
tascan_condition_history
Declared read-only
Show server-provided details
Server description (copied; language not verified)
Get an asset's longitudinal condition history — score trend over time, every assessment with grade, delta, findings, and who assessed it. The per-serial-number condition ledger.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "asset_id"
  ],
  "properties": {
    "asset_id": {
      "type": "string",
      "description": "Asset ID"
    }
  }
}
tascan_create_cycle
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Start an unattended build-review-decide cycle (protocol v0.2). Queues T1 CODE: (or SHELL:) with your build_brief on the AI Inbox and T2 REVIEW: with your review_brief, born blocked on T1. The local executor builds, stores the exact bytes of artifact_paths as a bundle (build_ref = sha256 over the manifest), the independent reviewer reviews THAT bundle, an approve verdict mints a Decision task for the human authority (one SMS), Approve mints an Integrate task for the deploy id. Revise verdicts spawn revisions (cap max_revisions, default 3); reject, human Reject, scope violations or exhausted revisions PARK the cycle (a Parked task with Resume with notes / Close). REQUIRES agent:dispatch:code. Duplicate protection: the same idempotency_key, or the same briefs + paths, within 24 h returns the existing root instead of queueing again (created=false). Optional `reviews[]` attaches a multi-lens review panel (design item 14a) in place of the single OpenAI review — one review task mints per lens and every blocking lens must approve before the Decision task mints. Track with tascan_get_cycle_report (root_id). Nothing spawns a cycle on its own.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "artifact_paths",
    "build_brief",
    "project_id",
    "review_brief",
    "title"
  ],
  "properties": {
    "repo": {
      "type": "string",
      "description": "Which codebase on the executor the build runs in — an alias from the executor's allowlist (tascan-agent/repos.json), e.g. \"tascan\" (default), \"merchskipper\", \"inkskipper\", \"rangerlizzy\", \"cardvault\", \"take1\", \"fitcheck\", \"safegrid\", \"eternity\", \"maniacs\". artifact_paths are relative to that repo. An unknown alias is refused by the executor (repo_unknown) and the cycle parks."
    },
    "title": {
      "type": "string",
      "description": "Short human title (1-200 chars). T1 becomes \"CODE: <title>\", T2 \"REVIEW: <title>\"."
    },
    "reviews": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "brief",
          "lens",
          "provider"
        ],
        "properties": {
          "lens": {
            "type": "string",
            "description": "Slug, ^[a-z][a-z0-9-]{0,39}$, unique in the array."
          },
          "brief": {
            "type": "string",
            "description": "Cycle-specific context for this lens (1-8000 chars)."
          },
          "model": {
            "type": "string",
            "description": "Optional, 1-100 chars."
          },
          "blocking": {
            "type": "boolean",
            "description": "Default true. At least one entry in the array must be blocking."
          },
          "provider": {
            "enum": [
              "openai",
              "anthropic",
              "gemini"
            ],
            "type": "string"
          },
          "max_tool_calls": {
            "type": "integer",
            "description": "Optional, provider openai only."
          }
        }
      },
      "description": "Optional multi-lens review panel (design item 14a) instead of today's single OpenAI review_brief lens — 1-8 entries, each: {lens: slug matching ^[a-z][a-z0-9-]{0,39}$ unique per array (e.g. \"code-correctness\", \"security\", \"ui-ux\"), brief: 1-8000 chars of cycle-specific context for that lens, provider: \"openai\"|\"anthropic\"|\"gemini\", model?: 1-100 chars, blocking?: boolean (default true — at least one entry must be blocking or the whole array is refused), max_tool_calls?: integer (openai only)}. One REVIEW: task mints per lens, all blocked on T1; the Decision task mints only once every blocking lens has approved the same build. Omit for today's single OpenAI code review."
    },
    "task_type": {
      "enum": [
        "CODE",
        "SHELL"
      ],
      "type": "string",
      "description": "T1 prefix (default CODE)."
    },
    "project_id": {
      "type": "string",
      "description": "Working project (UUID). Its Decisions and Agent Questions lists are created on the first cycle (coord_ensure_lists). Requires the org human authority to be configured (coord_set_authority) — otherwise 403."
    },
    "build_brief": {
      "type": "string",
      "description": "The executor prompt (1-40000 chars). Executed verbatim by the local Claude Code runner as a CODE:/SHELL: task — write it as a complete instruction, name the files, forbid nothing the runner already forbids (deploy/commit/push are refused by its context)."
    },
    "preview_url": {
      "type": "string",
      "description": "Optional https preview link shown on the Decision task."
    },
    "review_brief": {
      "type": "string",
      "description": "The reviewer prompt (1-40000 chars). The reviewer reads the stored bundle (tascan_get_build / tascan_get_build_file), the task text and the filtered trail; it returns approve, revise, reject or needs_input as strict JSON bound to the build_ref. Still required even when `reviews[]` is given (kept as T2's legacy description text)."
    },
    "max_questions": {
      "type": "integer",
      "description": "Questions a runner may ask per task before the attempt fails (default 3)."
    },
    "max_revisions": {
      "type": "integer",
      "description": "Revision cap (default 3): at most max_revisions + 1 builds and reviews."
    },
    "artifact_paths": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Repo-relative paths the build binds (1-64). Exactly these files are stored as the bundle and hashed into build_ref; files the executor touches OUTSIDE them fail the scope check and park the cycle. No .., not absolute, no drive letter, no backslash."
    },
    "idempotency_key": {
      "type": "string",
      "description": "Optional caller key (≤ 200 chars). The same key within 24 h returns the existing cycle (created=false) instead of a duplicate dispatch."
    },
    "integrate_title": {
      "type": "string",
      "description": "Optional title template for the Integrate task (default \"Integrate: <title>\")."
    },
    "checkpoint_title": {
      "type": "string",
      "description": "Optional title template for the Decision task (default \"Decision: <title>\")."
    },
    "max_cost_micro_usd": {
      "type": "integer",
      "description": "Per-cycle spend cap summed over every attempt, in micro-USD (default 5000000 = USD 5). A claim that could overrun it is refused (budget_exhausted)."
    },
    "integrate_description": {
      "type": "string",
      "description": "Optional description template for the Integrate task."
    },
    "checkpoint_description": {
      "type": "string",
      "description": "Optional description template for the Decision task; the build_ref, preview and findings summary are appended."
    }
  }
}
tascan_create_event
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Create a new event (task list) within a project. Supports team_mode (shared completions) and multi_instance (each worker gets isolated copy — great for surveys, onboarding, info collection). team_mode and multi_instance cannot both be true.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "name",
    "project_id"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Event name"
    },
    "team_mode": {
      "type": "boolean",
      "description": "Team mode — shared completions"
    },
    "project_id": {
      "type": "string",
      "description": "Project ID"
    },
    "description": {
      "type": "string",
      "description": "Event description"
    },
    "multi_instance": {
      "type": "boolean",
      "description": "Multi-instance — each worker gets isolated copy"
    },
    "assigned_worker_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Worker UUIDs to assign to this event. Each gets a personal tap-to-open link. Note: a worker holds one event assignment per project — assigning moves them."
    }
  }
}
tascan_create_invoice
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Create a client invoice and get its shareable link. Two ways to bill: (a) pass explicit line_items, or (b) pass project_id or task_list_ids plus hourly_rate (quarter-hour billing from first→last verified completion per list) or flat_rate_per_list, and TaScan builds one line per list from VERIFIED work ("<list> — 7/7 tasks verified · Sep 1 · 1.25h"); lists with no completions are skipped. A single-list invoice also mints a client-facing Service Report (acknowledge → pay) and links it. Returns invoice number, totals, url, and the work it billed.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "client_name"
  ],
  "properties": {
    "notes": {
      "type": "string",
      "description": "Payment terms / thank-you shown on the invoice"
    },
    "status": {
      "enum": [
        "draft",
        "sent"
      ],
      "type": "string",
      "description": "Default sent"
    },
    "billing": {
      "type": "object",
      "properties": {
        "mode": {
          "enum": [
            "hourly",
            "day_rate",
            "flat"
          ],
          "type": "string"
        },
        "day_rate": {
          "type": "number"
        },
        "expenses": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "amount",
              "description"
            ],
            "properties": {
              "amount": {
                "type": "number"
              },
              "quantity": {
                "type": "number"
              },
              "description": {
                "type": "string"
              }
            }
          }
        },
        "overtime": {
          "type": "boolean"
        },
        "per_diem": {
          "type": "number",
          "description": "Dollars per work day"
        },
        "min_hours": {
          "type": "number"
        },
        "hourly_rate": {
          "type": "number"
        },
        "per_diem_days": {
          "type": "number"
        },
        "flat_rate_per_list": {
          "type": "number"
        },
        "overtime_multiplier": {
          "type": "number"
        },
        "overtime_after_hours": {
          "type": "number"
        },
        "double_time_multiplier": {
          "type": "number"
        },
        "double_time_after_hours": {
          "type": "number"
        }
      },
      "description": "Billing rules for auto line items. mode: hourly (default when hourly_rate given) | day_rate | flat. Overtime/double time are computed PER WORK DAY from verified completions: hours over overtime_after_hours (default 8) bill at overtime_multiplier (1.5×), hours over double_time_after_hours (12) at double_time_multiplier (2×); set overtime:false to disable. per_diem adds one line × work days (or per_diem_days). expenses are pass-through lines."
    },
    "due_date": {
      "type": "string",
      "description": "YYYY-MM-DD (default: 30 days out)"
    },
    "tax_rate": {
      "type": "number",
      "description": "Fraction, e.g. 0.0825 for 8.25%"
    },
    "min_hours": {
      "type": "number",
      "description": "Minimum billable hours per list (e.g. 1)"
    },
    "line_items": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "description",
          "unit_price"
        ],
        "properties": {
          "quantity": {
            "type": "number"
          },
          "unit_price": {
            "type": "number"
          },
          "description": {
            "type": "string"
          }
        }
      },
      "description": "Explicit lines instead of auto-billing"
    },
    "project_id": {
      "type": "string",
      "description": "Bill every list in this project (auto line items)"
    },
    "client_name": {
      "type": "string",
      "description": "Bill-to name (person or company)"
    },
    "hourly_rate": {
      "type": "number",
      "description": "Dollars per hour for auto line items"
    },
    "client_email": {
      "type": "string"
    },
    "client_phone": {
      "type": "string"
    },
    "company_name": {
      "type": "string",
      "description": "Your company name on the attached Service Report (defaults to the org name)"
    },
    "task_list_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Bill just these lists (auto line items)"
    },
    "payment_options": {
      "type": "object",
      "properties": {
        "other": {
          "type": "string"
        },
        "venmo": {
          "type": "string"
        },
        "zelle": {
          "type": "string"
        },
        "paypal": {
          "type": "string"
        },
        "cashapp": {
          "type": "string"
        },
        "applecash": {
          "type": "string"
        }
      },
      "description": "Pay-how-you-like buttons on the invoice (defaults to the org's saved handles). Keys: venmo (@handle), cashapp ($cashtag), paypal (paypal.me name), zelle (phone/email), applecash (phone), other (free text e.g. \"cash or check\"). Stripe card checkout is separate and only shows when the org has invoice_payments enabled."
    },
    "flat_rate_per_list": {
      "type": "number",
      "description": "Dollars per list for auto line items (used when no hourly_rate)"
    },
    "attach_service_report": {
      "type": "boolean",
      "description": "Mint + link a Service Report for single-list invoices (default true)"
    }
  }
}
tascan_create_project
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Create a new TaScan project (top-level container for events)
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Project name"
    },
    "location": {
      "type": "string",
      "description": "Project location / venue"
    }
  }
}
tascan_create_worker
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Create a new worker (taskee) in the organization
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Worker name"
    },
    "email": {
      "type": "string",
      "description": "Email"
    },
    "phone": {
      "type": "string",
      "description": "Phone number"
    }
  }
}
tascan_create_zone
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Create a geofenced work zone. Delivery zones route workers who open the project Site Gate (geo.html?project=...) to this zone's task list when GPS places them inside the radius. Set enforce_on_list=true to zone-lock the task list — workers cannot start it from outside the zone.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "lat",
    "lng",
    "name"
  ],
  "properties": {
    "lat": {
      "type": "number",
      "description": "Zone center latitude"
    },
    "lng": {
      "type": "number",
      "description": "Zone center longitude"
    },
    "kind": {
      "enum": [
        "work_site",
        "hazard",
        "containment",
        "restricted"
      ],
      "type": "string",
      "description": "What the fence MEANS. work_site: expected here (auto clock-in, list on enter). hazard: enter allowed under conditions — required_ppe + photo checkpoint verified by AI vision, the OSHA row. containment: must stay inside; leaving = breach. restricted: must stay out; entering = breach. Default work_site."
    },
    "name": {
      "type": "string",
      "description": "Zone name (e.g. \"Stage Left\", \"Loading Dock\")"
    },
    "polygon": {
      "type": "array",
      "items": {
        "type": "array",
        "items": {
          "type": "number"
        }
      },
      "description": "Polygon/rectangle zone instead of a circle: vertices as [[lat,lng], ...], at least 3.  lat/lng/radius_m are then computed (centroid + bounding radius) — still pass lat/lng but they are overridden."
    },
    "radius_m": {
      "type": "number",
      "description": "Radius in meters (default 150, min 10, max 100000)"
    },
    "project_id": {
      "type": "string",
      "description": "Project this zone belongs to"
    },
    "description": {
      "type": "string",
      "description": "Shown to workers on the Site Gate page"
    },
    "notify_email": {
      "type": "string",
      "description": "Alert recipient override — defaults to all org admins"
    },
    "required_ppe": {
      "type": "array",
      "items": {
        "enum": [
          "hard_hat",
          "safety_glasses",
          "hi_vis_vest",
          "gloves",
          "steel_toe_boots",
          "hearing_protection",
          "harness",
          "respirator",
          "face_shield"
        ],
        "type": "string"
      },
      "description": "Hazard zones: PPE the worker must show at entry (pick-list so the audit reads the same words)"
    },
    "task_list_id": {
      "type": "string",
      "description": "Task list the Site Gate routes workers to when they are inside this zone"
    },
    "auto_clock_in": {
      "type": "boolean",
      "description": "Writes a shift_start when the WORKER PAGE, while open, sees the phone enter the zone; detection is pull-based, there is no background geofencing.  For a background-free presence event use a gate NFC/QR scan."
    },
    "enter_message": {
      "type": "string",
      "description": "What the worker sees / is texted on entry (default is generated from the rule)"
    },
    "auto_clock_out": {
      "type": "boolean",
      "description": "Writes a shift_end when the WORKER PAGE, while open, sees the phone leave the zone; detection is pull-based, there is no background geofencing.  For a background-free presence event use a gate NFC/QR scan."
    },
    "notify_on_exit": {
      "type": "boolean",
      "description": "Email the manager when a worker leaves this zone (accountability — sign in then disappear)"
    },
    "alert_on_breach": {
      "type": "boolean",
      "description": "Email + SMS the admin on containment-exit / restricted-enter (default true)"
    },
    "enforce_on_list": {
      "type": "boolean",
      "description": "Zone-lock the task list — it cannot be started from outside the radius"
    },
    "notify_on_enter": {
      "type": "boolean",
      "description": "Email the manager when a worker enters this zone (danger areas)"
    },
    "ppe_photo_required": {
      "type": "boolean",
      "description": "Hazard zones: pop a photo checkpoint on entry (default true when required_ppe is set)"
    },
    "sms_worker_on_exit": {
      "type": "boolean",
      "description": "Text the worker on exit"
    },
    "task_list_on_enter": {
      "type": "string",
      "description": "Task list dispatched to the worker (in-app + SMS) when they cross into the zone"
    },
    "sms_worker_on_enter": {
      "type": "boolean",
      "description": "Text the worker the rule/list on entry, even if the app is closed"
    }
  }
}
tascan_delete_event
Declared destructive
Show server-provided details
Server description (copied; language not verified)
Delete an event (task list) and all its tasks and completions. This action is irreversible.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "list_id"
  ],
  "properties": {
    "list_id": {
      "type": "string",
      "description": "Task list (event) ID to delete"
    }
  }
}
tascan_delete_project
Declared destructive
Show server-provided details
Server description (copied; language not verified)
Delete a project and all its events, tasks, and completions. This action is irreversible.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "project_id"
  ],
  "properties": {
    "project_id": {
      "type": "string",
      "description": "Project ID to delete"
    }
  }
}
tascan_delete_subtask
Declared destructive
Show server-provided details
Server description (copied; language not verified)
Delete a subtask and its completions. This action is irreversible.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "subtask_id"
  ],
  "properties": {
    "subtask_id": {
      "type": "string",
      "description": "Subtask ID to delete"
    }
  }
}
tascan_delete_task
Declared destructive
Show server-provided details
Server description (copied; language not verified)
Delete a specific task and its completions. This action is irreversible.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "task_id"
  ],
  "properties": {
    "task_id": {
      "type": "string",
      "description": "Task ID to delete"
    }
  }
}
tascan_delete_worker
Declared destructive
Show server-provided details
Server description (copied; language not verified)
Tombstone a worker record (is_active=false). REFUSES if the worker has any task/subtask completions or payments — merge those into the real worker with tascan_merge_workers instead. Never hard-deletes.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "worker_id"
  ],
  "properties": {
    "worker_id": {
      "type": "string",
      "description": "Worker ID to delete"
    }
  }
}
tascan_dispatch_instruction
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Step 3 of the Closed-Loop Autonomous Operations Protocol. Dispatches remediation to the worker via MULTI-CHANNEL delivery: (1) issue thread message, (2) in-app notification, (3) progress feed update, (4) SMS if phone on file, (5) optional remediation task list creation. Closes the loop from digital AI analysis to physical worker execution.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "instruction",
    "issue_id"
  ],
  "properties": {
    "ai_agent": {
      "type": "string",
      "description": "Name of the AI agent dispatching (default: TaScan AI)"
    },
    "issue_id": {
      "type": "string",
      "description": "Issue ID this instruction relates to"
    },
    "send_sms": {
      "type": "boolean",
      "description": "Send SMS to worker (default: true if phone on file)"
    },
    "worker_id": {
      "type": "string",
      "description": "Target worker ID (defaults to the worker who reported the issue)"
    },
    "instruction": {
      "type": "string",
      "description": "Clear, actionable instruction for the worker to execute"
    },
    "remediation_tasks": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "description": "Optional array of tasks to create as a remediation task list. Each: { title, description, response_type, requires_photo, is_safety_checkpoint, sort_order }"
    },
    "recommendation_summary": {
      "type": "string",
      "description": "One-line summary for the task list description"
    }
  }
}
tascan_dispatch_to_agent
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
PREFERRED tool for sending work to an AI agent. Dispatches a task to the agent's inbox — picked up and executed automatically. No list ID needed. REQUIRES the agent:dispatch permission on this connection (CODE:/SHELL: tasks also require agent:dispatch:code) — reconnect and tick the agent checkbox(es) if refused. Routing is by TITLE PREFIX only: CODE: SHELL: PLAN: MCP: → local Claude Code on Mike's PC; RESEARCH: WRITE: REVIEW: → cloud; no prefix (DEFAULT) → local while the PC agent is alive, else cloud. The cloud agent refuses CODE/SHELL/PLAN/MCP. Use "agent" param to target a specific agent (default: claude-code-local). Use tascan_list_agents to discover available agents; track progress with tascan_get_task (its "agent" block).
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "task"
  ],
  "properties": {
    "task": {
      "type": "string",
      "description": "The full task text. START it with CODE: SHELL: PLAN: MCP: RESEARCH: WRITE: or REVIEW: for routing (prefix-only — nothing may precede it), or leave it unprefixed (DEFAULT). The whole text is stored in the task description; the first 140 chars become the title."
    },
    "agent": {
      "type": "string",
      "description": "Agent ID or name to dispatch to (default: claude-code-local). Use tascan_list_agents to see options. An unknown agent is an error, never a silent fallback."
    },
    "priority": {
      "enum": [
        "normal",
        "urgent"
      ],
      "type": "string",
      "description": "Priority level (default: normal). The urgent marker is placed AFTER the routing prefix so it never breaks routing."
    }
  }
}
tascan_find
Declared read-only
Show server-provided details
Server description (copied; language not verified)
Cross-entity search: find projects, task lists, tasks, workers, or condition assets by name in one call — with ids and parent context to disambiguate. Use this instead of walking projects→lists→tasks or guessing ids from display names.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "type": {
      "enum": [
        "project",
        "list",
        "task",
        "worker",
        "asset"
      ],
      "type": "string",
      "description": "Optional: restrict to one entity type"
    },
    "query": {
      "type": "string",
      "description": "Search text (min 2 chars, case-insensitive substring)"
    }
  }
}
tascan_find_duplicate_workers
Declared read-only
Show server-provided details
Server description (copied; language not verified)
Find candidate same-person worker records with per-signal match detail (Patent 4 §6.25(b) signals: phone reuse, name similarity, GPS pattern correlation). Turns identity fragmentation from an accidental discovery into a monitorable metric, and feeds the merge workflow its candidate list.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [],
  "properties": {
    "name": {
      "type": "string",
      "description": "Or: search duplicates by display name"
    },
    "threshold": {
      "type": "number",
      "description": "Min confidence 0-1 (default 0.15)"
    },
    "worker_id": {
      "type": "string",
      "description": "Anchor worker to find duplicates OF (preferred — enables phone + GPS signals)"
    },
    "include_orphans": {
      "type": "boolean",
      "description": "Also consider org-less (orphan) worker records — off by default"
    }
  }
}
tascan_generate_qr
Declared idempotent
Show server-provided details
Server description (copied; language not verified)
Generate a QR code for a task list (event) that workers can scan to access tasks
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "list_id"
  ],
  "properties": {
    "list_id": {
      "type": "string",
      "description": "Task list (event) ID"
    }
  }
}
tascan_generate_report
Declared idempotent
Show server-provided details
Server description (copied; language not verified)
Mint a shareable report and get its link. Types: completion (full proof-of-work for one list: tasks, responses, subtasks, photos, GPS + place names, timing, QR pair), service (client-facing version of a list with YOUR company branding and a Client Acknowledgment button — the ack files into the list thread), project (every list in a project rolled up), evidence (compliance Evidence Pack; admin sign-in required to view). Links are stable — the same list/project returns the same link. Optionally text the link to a phone through the TaScan SMS lane.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "type"
  ],
  "properties": {
    "type": {
      "enum": [
        "completion",
        "service",
        "project",
        "evidence"
      ],
      "type": "string"
    },
    "list_id": {
      "type": "string",
      "description": "Required for completion / service"
    },
    "message": {
      "type": "string",
      "description": "Service report: a note to the client shown under the header"
    },
    "send_note": {
      "type": "string",
      "description": "Short intro for the text, e.g. \"Here is your report from Love Productions:\""
    },
    "project_id": {
      "type": "string",
      "description": "Required for project / evidence"
    },
    "show_issues": {
      "type": "boolean",
      "description": "Service report: include reported issues (default false)"
    },
    "company_name": {
      "type": "string",
      "description": "Service report branding (defaults to the org name)"
    },
    "show_workers": {
      "type": "boolean",
      "description": "Service report: show worker names (default true)"
    },
    "send_to_phone": {
      "type": "string",
      "description": "Text the link to this number (E.164 or 10-digit US)"
    }
  }
}
tascan_get_build
Declared read-only
Show server-provided details
Server description (copied; language not verified)
Manifest of a stored build bundle by build_ref (protocol v0.2 build_artifacts): the exact files the executor produced for the cycle's artifact_paths, each with sha256, byte length and whether text content is stored (binary or over-cap files keep the sha only). build_ref = sha256 over the manifest, computed in the database once; the reviewer reviews THESE bytes, the human approves THIS ref, the integrate task records THIS ref. Read tier. Use tascan_get_build_file to read a file. Truncated at 12000 chars. Reading the manifest is discovery, not a read of any file.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "build_ref"
  ],
  "properties": {
    "build_ref": {
      "type": "string",
      "description": "sha256:<64 hex> (or the bare 64 hex) — from tascan_get_task (coord.build_ref / agent.runs[].build_ref) or tascan_get_cycle_report."
    }
  }
}
tascan_get_build_file
Declared read-only
Show server-provided details
Server description (copied; language not verified)
Read one file from a stored build bundle by build_ref and path (protocol v0.2 build_artifacts) — the exact bytes the executor produced, not a working-tree read. Returns up to 12000 chars per call with offset/limit paging (next_offset when truncated), plus the file's sha256 and byte length. Binary or over-cap files return no content (the sha256 still binds them). Read tier; this is what the independent reviewer reads. The header lines (path, build, sha256, chars a-b of total) are the record a reviewer's read is bound to; read every chunk until the range covers the whole file.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "build_ref",
    "path"
  ],
  "properties": {
    "path": {
      "type": "string",
      "description": "Repo-relative path exactly as listed by tascan_get_build."
    },
    "limit": {
      "type": "integer",
      "description": "Characters to return (1-12000, default 12000)."
    },
    "offset": {
      "type": "integer",
      "description": "Character offset to start from (default 0)."
    },
    "build_ref": {
      "type": "string",
      "description": "sha256:<64 hex> (or the bare 64 hex)."
    }
  }
}
tascan_get_cycle_report
Declared read-only
Show server-provided details
Server description (copied; language not verified)
The audit report of one coordination cycle by its root task id (protocol v0.2, get_cycle_report): every step task (build, review, checkpoint, integrate, question, parked) with its revision and state, every execution attempt with runner, outcome, build_ref and usage/cost, every completion (receipt id = completion id, receipt hash), every reviewer verdict, every human decision and answer, the full trail (messages), the ledger events and the hash-chain verdict per task, plus spend against the cap. A computed summary (stage, attempts, verdicts, decisions, receipts, spend, chains_ok) comes first; pass full=true for the complete JSON (large). Read tier. This is the ONLY per-cycle notification surface: cycle steps do not e-mail or text anyone except the one checkpoint / human-question SMS.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "root_id"
  ],
  "properties": {
    "full": {
      "type": "boolean",
      "description": "true = the complete report JSON (tasks, runs, completions, messages, events, bundles, chains) after the summary, capped at 12000 chars. Default: summary only."
    },
    "root_id": {
      "type": "string",
      "description": "The cycle root = the T1 build task id (returned by tascan_create_cycle; a non-root cycle task returns its root_id in the error)."
    }
  }
}
tascan_get_event
Declared read-only
Show server-provided details
Server description (copied; language not verified)
Get details of a specific event (task list) including its tasks
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "list_id"
  ],
  "properties": {
    "list_id": {
      "type": "string",
      "description": "Task list (event) ID"
    }
  }
}
tascan_get_project
Declared read-only
Show server-provided details
Server description (copied; language not verified)
Get details of a specific project
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "project_id"
  ],
  "properties": {
    "project_id": {
      "type": "string",
      "description": "Project ID"
    }
  }
}
tascan_get_receipt
Declared read-only
Show server-provided details
Server description (copied; language not verified)
Fetch the signed Action Receipt (Ed25519 JWS) for one completed task by completion_id (tascan_get_task -> completions[].id). Returns a readable summary (what, who, verification, evidence hashes, outcome, ledger chain) plus receipt_id/serial/kid, the compact JWS and the public verify URL. Verify offline against the JWKS or online by POSTing a JSON body whose jws field holds the compact receipt. Read outcome and verification separately: outcome completed = the executor returned and a result was recorded; verification.result = the verdict of a named policy; all-null verification with reason no_policy_run = no policy ran. Never treat outcome=completed as success without a policy verdict you trust (protocol 8.3 C11). Verifier: 6.8. profile=public returns the separately signed public export profile (protocol 6.10): it withholds the raw org, list, project, worker, run and trace ids (each a 16-hex id_hash) and storage locators, and binds to the full receipt - the form for anyone outside the org. Read tier.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "completion_id"
  ],
  "properties": {
    "profile": {
      "enum": [
        "full",
        "public"
      ],
      "type": "string",
      "description": "full (default) = the org view with the unsigned private block; public = the separately signed public export profile: no raw org, list, project, worker, run or trace id (each is a 16-hex id_hash), no storage locators, plus a binding to the full receipt it was derived from - the form to hand to anyone outside the org"
    },
    "completion_id": {
      "type": "string",
      "description": "task_completions.id (UUID) - from tascan_get_task -> completions[].id"
    }
  }
}
tascan_get_report
Declared read-only
Show server-provided details
Server description (copied; language not verified)
Get completion report for a task list (event) including task status, completions, workers, and photos. Set include_responses to also return the actual submitted response data (numbers, text, choices) for each completed task plus a per-task photos list with fetchable signed URLs (short-lived, ~1h) for the photo evidence.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "list_id"
  ],
  "properties": {
    "list_id": {
      "type": "string",
      "description": "Task list (event) ID"
    },
    "include_responses": {
      "type": "boolean",
      "description": "Include the actual submitted response values for each completed task (default false — keeps the payload light)"
    }
  }
}
tascan_get_scan_history
Declared read-only
Show server-provided details
Server description (copied; language not verified)
Scan accountability data. Two modes: (1) tag_id — scans of a registered NFC tag; (2) task_list_id or project_id — every QR/link page-open stamp: when the code was scanned, GPS + IP + channel (qr/nfc/sms/email/link), who the scanner turned out to be, and the scan→start delta (how long between scanning and actually identifying + starting work — the sign-in-and-vanish metric).
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [],
  "properties": {
    "limit": {
      "type": "number",
      "description": "Max results (default 50, max 200)"
    },
    "since": {
      "type": "string",
      "description": "ISO timestamp — only scans after this"
    },
    "source": {
      "type": "string",
      "description": "Filter page scans by channel: qr | nfc | sms | email | link | unknown"
    },
    "tag_id": {
      "type": "string",
      "description": "NFC tag registry ID (from tascan_list_tags) — tag mode"
    },
    "project_id": {
      "type": "string",
      "description": "Project ID — page-scan mode, all lists in the project"
    },
    "task_list_id": {
      "type": "string",
      "description": "Task list ID — page-scan mode"
    }
  }
}
tascan_get_sms_status
Declared read-only
Show server-provided details
Server description (copied; language not verified)
Check delivery status of a previously sent TaScan SMS by its Twilio SID (returned by tascan_send_sms). Shows queued/sent/delivered/undelivered/failed plus carrier error codes.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "twilio_sid"
  ],
  "properties": {
    "twilio_sid": {
      "type": "string",
      "description": "Twilio message SID (SM...) from tascan_send_sms"
    }
  }
}
tascan_get_task
Declared read-only
Show server-provided details
Server description (copied; language not verified)
Get details of a specific task including completions and subtasks. Each completion carries photo_url (raw storage path, stable) and photo_signed_url (short-lived fetchable URL, ~1h; null when no photo) so you can actually view the photo evidence. Tasks dispatched to an AI agent also carry an "agent" block (state claimed|running|completed|failed|expired|released, attempts, current run with runner/trace_id/error) — the only place agent failures are reported. A completion with status "completed" means the executor returned and its result was recorded (a model refusal, a wrong answer or an administrative note all "complete"); it does NOT mean the requested result was accepted. Acceptance is the completion evidence_check / the receipt verification.result under a named policy, and in v0.1 no policy exists for agent tasks (exact-output and rubric policies are v0.2) — check the recorded response text yourself before treating an agent completion as success (protocol §2.6, §3.2, §8.3 C11).
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "task_id"
  ],
  "properties": {
    "task_id": {
      "type": "string",
      "description": "Task ID"
    }
  }
}
tascan_get_worker
Declared read-only
Show server-provided details
Server description (copied; language not verified)
Ungated, plain read of one worker row: name, contact, org, points, streaks, timestamps. (tascan_get_worker_passport is the rich stats view; this is the boring lookup.)
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "worker_id"
  ],
  "properties": {
    "worker_id": {
      "type": "string",
      "description": "Worker ID"
    }
  }
}
tascan_get_worker_passport
Declared read-only
Show server-provided details
Server description (copied; language not verified)
Get a worker's verified work passport — task counts, lists worked, photos submitted, GPS-verified hours, points, streaks, and earned merit badges, all computed from real completion data (not self-reported). Includes the shareable profile URL.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "worker_id"
  ],
  "properties": {
    "worker_id": {
      "type": "string",
      "description": "Worker ID"
    }
  }
}
tascan_invite_worker
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Invite a marketplace worker to a task list — the consented intro. TaScan texts the worker from its own number ("<Your org> wants you for <list>. Reply YES to share your contact and get the list, or NO to pass."). On YES the worker appears in your org with their name + phone, receives the list link, and you get a text + a thread message. On NO or silence (7 days) you never learn who they were. Use the worker_id from tascan_search_marketplace.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "list_id",
    "worker_id"
  ],
  "properties": {
    "list_id": {
      "type": "string",
      "description": "Task list you want them on"
    },
    "message": {
      "type": "string",
      "description": "Optional short intro prepended to the text (max 240 chars)"
    },
    "worker_id": {
      "type": "string",
      "description": "worker_id from a marketplace card"
    }
  }
}
tascan_list_agents
Declared read-only
Show server-provided details
Server description (copied; language not verified)
List all registered AI agents with their capabilities, inbox IDs, and status. Like reading input labels on a video matrix — discover which agents are available and what they can do before dispatching work.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [],
  "properties": {}
}
tascan_list_assets
Declared read-only
Show server-provided details
Server description (copied; language not verified)
List registered condition-ledger assets with their latest condition scores. Use to recover an asset_id for tascan_assess_condition or tascan_condition_history.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [],
  "properties": {
    "project_id": {
      "type": "string",
      "description": "Filter by project"
    }
  }
}
tascan_list_events
Declared read-only
Show server-provided details
Server description (copied; language not verified)
List all events (task lists) within a project
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "project_id"
  ],
  "properties": {
    "project_id": {
      "type": "string",
      "description": "Project ID"
    }
  }
}
tascan_list_invites
Declared read-only
Show server-provided details
Server description (copied; language not verified)
List marketplace invites you have sent and their status (pending / accepted / declined / expired / failed). Accepted invites include the worker's name and phone — that is the consent boundary; pending and declined never do.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [],
  "properties": {
    "status": {
      "enum": [
        "pending",
        "accepted",
        "declined",
        "expired",
        "failed"
      ],
      "type": "string"
    }
  }
}
tascan_list_invoices
Declared read-only
Show server-provided details
Server description (copied; language not verified)
List invoices for the org (newest first) with status, client, total, due date and share link. Filter by status (draft/sent/paid/overdue/cancelled) or project.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [],
  "properties": {
    "status": {
      "enum": [
        "draft",
        "sent",
        "paid",
        "overdue",
        "cancelled"
      ],
      "type": "string"
    },
    "project_id": {
      "type": "string"
    }
  }
}
tascan_list_issues
Declared read-only
Show server-provided details
Server description (copied; language not verified)
List all issues for a task list (event). Returns open, acknowledged, and resolved issues with severity, type, and category. Use this to discover issues that need AI analysis via tascan_analyze_issue.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "list_id"
  ],
  "properties": {
    "list_id": {
      "type": "string",
      "description": "Task list (event) ID"
    }
  }
}
tascan_list_payments
Declared read-only
Show server-provided details
Server description (copied; language not verified)
List gig payments and their lifecycle status: awaiting_completion (pledged, work not verified yet), ready_to_pay (verified — pay link sent to payer), paid, canceled. Filter by task list or status.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [],
  "properties": {
    "status": {
      "enum": [
        "awaiting_completion",
        "ready_to_pay",
        "paid",
        "canceled"
      ],
      "type": "string",
      "description": "Filter by status"
    },
    "task_list_id": {
      "type": "string",
      "description": "Filter by task list"
    }
  }
}
tascan_list_projects
Declared read-only
Show server-provided details
Server description (copied; language not verified)
List all TaScan projects in the organization
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "properties": {}
}
tascan_list_reports
Declared read-only
Show server-provided details
Server description (copied; language not verified)
List existing report links for a list or project (completion / service / project / evidence), newest first, with client acknowledgment status for service reports.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [],
  "properties": {
    "list_id": {
      "type": "string"
    },
    "project_id": {
      "type": "string"
    }
  }
}
tascan_list_scheduled_sms
Declared read-only
Show server-provided details
Server description (copied; language not verified)
List your org's scheduled texts (default: pending + sending, soonest first; status=sent|failed|cancelled to see history). Each row shows send_at, status, attempts, the Twilio sid once sent, and the last error for a failed row.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "properties": {
    "status": {
      "enum": [
        "pending",
        "sending",
        "sent",
        "failed",
        "cancelled"
      ],
      "type": "string",
      "description": "Filter by status (default pending + sending)"
    }
  }
}
tascan_list_subtasks
Declared read-only
Show server-provided details
Server description (copied; language not verified)
List the subtasks of a task, including completion state, stored response values, and completion timestamps (per-set timing).
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "task_id"
  ],
  "properties": {
    "task_id": {
      "type": "string",
      "description": "Parent task ID"
    }
  }
}
tascan_list_tags
Declared read-only
Show server-provided details
Server description (copied; language not verified)
List all registered NFC tags in the organization with their linked projects/task lists and scan counts
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "properties": {}
}
tascan_list_tasks
Declared read-only
Show server-provided details
Server description (copied; language not verified)
List all tasks in an event (task list)
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "list_id"
  ],
  "properties": {
    "list_id": {
      "type": "string",
      "description": "Task list (event) ID"
    }
  }
}
tascan_list_templates
Declared read-only
Show server-provided details
Server description (copied; language not verified)
List available task templates (built-in and saved)
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "description": "Filter by category (e.g. \"live-events\", \"hospitality\", \"logistics\")"
    }
  }
}
tascan_list_workers
Declared read-only
Show server-provided details
Server description (copied; language not verified)
List workers (taskees) in the organization. Supports filtering by name/email/phone substring, contact-info presence, and last-activity date. Each row includes completion_count (total task completions).
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Substring match on name, email, or phone"
    },
    "has_email": {
      "type": "boolean",
      "description": "true/false — same for email"
    },
    "has_phone": {
      "type": "boolean",
      "description": "true = only workers with a phone on file; false = only without"
    },
    "active_since": {
      "type": "string",
      "description": "ISO date/datetime — only workers with last_active_at on/after this"
    },
    "include_inactive": {
      "type": "boolean",
      "description": "true = also include inactive workers (e.g. tombstones left by a merge or delete) — useful for auditing right after tascan_merge_workers / tascan_delete_worker"
    }
  }
}
tascan_list_zones
Declared read-only
Show server-provided details
Server description (copied; language not verified)
List geofenced work zones, optionally filtered by project. Shows center, radius, routing target, and zone-lock status.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [],
  "properties": {
    "project_id": {
      "type": "string",
      "description": "Filter by project"
    }
  }
}
tascan_merge_workers
Declared destructive
Show server-provided details
Server description (copied; language not verified)
Merge duplicate worker records into one canonical identity (Patent 4 identity consolidation). Reassigns every reference (completions, timer events, points, payments, rosters — 31 columns across 31 tables), backfills missing phone/email on the primary, sums points, and tombstones the duplicates (merged_into + is_active=false — NEVER hard-deletes). ALWAYS run with dry_run=true first and show Mike the counts; pass dry_run=false only after explicit confirmation.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "duplicate_worker_ids",
    "primary_worker_id"
  ],
  "properties": {
    "dry_run": {
      "type": "boolean",
      "description": "true (default) = report reassignment counts only, change nothing. false = execute atomically."
    },
    "primary_worker_id": {
      "type": "string",
      "description": "The canonical worker that survives (usually the one with a phone)"
    },
    "duplicate_worker_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Worker IDs to fold into the primary (max 20)"
    }
  }
}
tascan_post_message
Declared idempotent
Show server-provided details
Server description (copied; language not verified)
Post a message on a task trail (protocol v0.2 trail_messages): kind question, answer, handoff or discussion. A message never completes a task, never satisfies a gate and never pages anyone. The actor is stamped from your credential (key:<id>, actor_type "key" — a credential, never a human), never from the body; the executor and the reviewer consume a key's answers only when the key holds agent:dispatch. On an ordinary task this is write tier. On a CYCLE task (one with coord) it needs agent:dispatch (agent:dispatch:code when the task, or the asker a question task stands for, is CODE:/SHELL:) because the text can become executor prompt or reviewer input. kind=answer on a dispatcher-addressed question task answers it through coord_answer_question and releases the blocked asker; a human-addressed question is answered only on the worker page (403 here). finding (reviewer runner) and decision (human completion) cannot be posted. Body ≤ 8000 chars; idempotency_key makes a replay return the same message.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "body",
    "kind",
    "task_id"
  ],
  "properties": {
    "body": {
      "type": "string",
      "description": "The message text (1-8000 chars). Treated as DATA by every reader; on a cycle task it may be prepended to the executor prompt as TRAIL INPUT."
    },
    "kind": {
      "enum": [
        "question",
        "answer",
        "handoff",
        "discussion"
      ],
      "type": "string",
      "description": "question = a question for the record (does not block anything); answer = answers a dispatcher question task and releases the asker; handoff = hand work or context to the next agent; discussion = a note."
    },
    "task_id": {
      "type": "string",
      "description": "Task ID (UUID). For an answer: the QUESTION task id (tascan_get_task on the asker shows coord.blocked_by)."
    },
    "reply_to": {
      "type": "string",
      "description": "Optional message id this replies to."
    },
    "addressee": {
      "enum": [
        "human",
        "dispatcher"
      ],
      "type": "string",
      "description": "Optional, kind=question only: who the question is for (recorded; nobody is paged)."
    },
    "build_ref": {
      "type": "string",
      "description": "Optional sha256:<64 hex> the message is about (defaults to the cycle task's bound build)."
    },
    "idempotency_key": {
      "type": "string",
      "description": "Optional replay key (≤ 200 chars): the same key on the same task returns the same message id."
    }
  }
}
tascan_project_digest
Declared read-only
Show server-provided details
Server description (copied; language not verified)
One call that gives a chat client (ChatGPT, Claude) a whole TaScan project in about 2,000 words: the project, every task list with task counts, open decisions and questions, the last 5 coordination cycles with verdicts and spend, the latest 5 receipts, and total spend — returned as Markdown (capped at 12,000 chars). Read tier. Use it before asking a human to paste anything.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "project_id"
  ],
  "properties": {
    "project_id": {
      "type": "string",
      "description": "Project ID (UUID)."
    }
  }
}
tascan_query_responses
Declared read-only
Show server-provided details
Server description (copied; language not verified)
Query one task's submitted responses across every list in a project — e.g. the same exercise repeated across many workout lists returns one chronological progression series instead of N report lookups. Match by task title pattern or exact task ID. Subtask completions interleave into the same series labeled 'Task › Subtask' (e.g. per-set values Set 1/2/3 with their own timestamps), so set-level progression chains across lists automatically.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "project_id",
    "task"
  ],
  "properties": {
    "task": {
      "type": "string",
      "description": "Task title pattern (case-insensitive substring) or exact task ID"
    },
    "limit": {
      "type": "number",
      "description": "Max responses to return (default 200, max 500)"
    },
    "project_id": {
      "type": "string",
      "description": "Project ID"
    }
  }
}
tascan_recommend_fix
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Step 2 of the Closed-Loop Autonomous Operations Protocol. Post an AI-generated recommendation to an issue thread. Accepts both a text recommendation and an optional structured_recommendation object with task definitions for auto-dispatch. The recommendation is persisted in the AI audit trail.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "issue_id",
    "recommendation"
  ],
  "properties": {
    "ai_agent": {
      "type": "string",
      "description": "Name of the AI agent posting (default: TaScan AI)"
    },
    "issue_id": {
      "type": "string",
      "description": "Issue ID to recommend a fix for"
    },
    "recommendation": {
      "type": "string",
      "description": "The AI-generated recommendation text (clear, actionable instructions)"
    },
    "structured_recommendation": {
      "type": "object",
      "description": "Optional structured recommendation with tasks for auto-dispatch. Format: { recommendation_summary, confidence_score, tasks: [{ title, description, response_type, requires_photo, is_safety_checkpoint, sort_order }], estimated_duration_minutes, required_responder_role }"
    }
  }
}
tascan_register_agent
Declared idempotent
Show server-provided details
Server description (copied; language not verified)
Register a new AI agent in the agent registry. The agent will appear in tascan_list_agents and can receive dispatched tasks. Self-registration for AI agents joining the TaScan network. REQUIRES the agent:dispatch permission (defining a dispatch target is a dispatch permission); inbox_id must be a task list (event) in your organization.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "capabilities",
    "id",
    "inbox_id",
    "name",
    "type"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Unique agent ID (e.g. \"my-agent-1\")"
    },
    "name": {
      "type": "string",
      "description": "Display name (e.g. \"Research Bot\")"
    },
    "type": {
      "enum": [
        "local",
        "cloud",
        "hybrid"
      ],
      "type": "string",
      "description": "Agent type"
    },
    "model": {
      "type": "string",
      "description": "Model powering this agent (e.g. \"claude-sonnet-4-6\")"
    },
    "inbox_id": {
      "type": "string",
      "description": "Task list ID this agent monitors for new tasks"
    },
    "location": {
      "type": "string",
      "description": "Where the agent runs (e.g. \"AWS us-east-1\")"
    },
    "worker_id": {
      "type": "string",
      "description": "TaScan worker ID for this agent"
    },
    "description": {
      "type": "string",
      "description": "What this agent does"
    },
    "capabilities": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Task type prefixes this agent handles (e.g. [\"RESEARCH\", \"WRITE\"])"
    }
  }
}
tascan_register_asset
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Register a physical asset (equipment, structure, vehicle, machine) in the condition ledger so it can be assessed over time. Each asset gets a longitudinal condition history with AI scoring and degradation trajectory.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Asset name (e.g. \"LED Wall Processor #3\")"
    },
    "asset_type": {
      "type": "string",
      "description": "Type (e.g. \"LED processor\", \"forklift\", \"scaffold\")"
    },
    "project_id": {
      "type": "string"
    },
    "description": {
      "type": "string",
      "description": "Context the AI assessor should know"
    },
    "serial_number": {
      "type": "string",
      "description": "Serial number or asset tag (unique per org)"
    },
    "location_description": {
      "type": "string"
    }
  }
}
tascan_register_tag
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Register a physical NFC tag to a project, task list, or specific task. When someone taps the tag, TaScan routes them to the linked resource. Tags use NTAG215 chips and are programmed with NFC Tools Pro.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "tag_hardware_id",
    "tag_name",
    "target_type"
  ],
  "properties": {
    "task_id": {
      "type": "string",
      "description": "Task ID (required for task targets)"
    },
    "tag_name": {
      "type": "string",
      "description": "Friendly name (e.g., \"Ballroom A Door\", \"Breaker Panel 3\")"
    },
    "project_id": {
      "type": "string",
      "description": "Project ID"
    },
    "target_type": {
      "enum": [
        "project",
        "task_list",
        "task"
      ],
      "type": "string",
      "description": "What this tag points to"
    },
    "task_list_id": {
      "type": "string",
      "description": "Task list ID (required for task_list/task targets)"
    },
    "tag_hardware_id": {
      "type": "string",
      "description": "NFC tag hardware serial number (e.g., \"04:CB:6C:51:CE:2A:81\")"
    },
    "location_description": {
      "type": "string",
      "description": "Physical location of the tag"
    }
  }
}
tascan_reply_with_list
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Reply to a task list WITH a task list — the two-way tasking primitive. Creates a new list linked into the parent's thread, aimed back at whoever sent the original (e.g. "Grant access — pick a window" with response_type date, or an info request with response_type text). The org gets pinged; the thread shows in both the worker portal and Simple Mode. Use tascan_get_thread-style follow-up via tascan_list_projects/tascan_get_report to read answers.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "parent_list_id",
    "tasks",
    "title"
  ],
  "properties": {
    "tasks": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "title"
        ],
        "properties": {
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "response_type": {
            "enum": [
              "checkbox",
              "text",
              "number",
              "date",
              "choice",
              "photo"
            ],
            "type": "string",
            "description": "\"date\" for scheduling windows, \"text\" for info requests, \"choice\" needs response_config.options"
          },
          "response_config": {
            "type": "object"
          }
        }
      },
      "description": "Items the recipient answers — each becomes a typed task"
    },
    "title": {
      "type": "string",
      "description": "Reply list title (e.g. \"Before I can start...\")"
    },
    "author_name": {
      "type": "string",
      "description": "Who is replying (shown in the thread)"
    },
    "parent_list_id": {
      "type": "string",
      "description": "The list being replied to"
    }
  }
}
tascan_request_payment
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Pledge a payment on a task list: when the list is verified complete (every task done + photo evidence on photo-required tasks), the payer automatically receives a Stripe pay link that routes the money DIRECTLY to the worker (0% TaScan fee). No money moves and no card is stored at pledge time. The worker must have completed payout onboarding (Get Paid on their profile).
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "amount_cents",
    "payer_email",
    "task_list_id",
    "worker_id"
  ],
  "properties": {
    "memo": {
      "type": "string",
      "description": "What the payment is for (shown to the payer)"
    },
    "worker_id": {
      "type": "string",
      "description": "Worker who gets paid"
    },
    "payer_name": {
      "type": "string"
    },
    "payer_email": {
      "type": "string",
      "description": "Who pays — receives the pay link on verification"
    },
    "amount_cents": {
      "type": "number",
      "description": "Amount in cents ($1 min, $10,000 max)"
    },
    "task_list_id": {
      "type": "string",
      "description": "Task list the payment is tied to"
    }
  }
}
tascan_schedule_sms
Declared idempotent
Show server-provided details
Server description (copied; language not verified)
Schedule a transactional TaScan SMS for a future time (up to 90 days out): the text is sent by TaScan's own scheduler (every 5 minutes) through the same guarded lane as tascan_send_sms — recipient must be a worker of your org or a phone the org already knows, STOP opt-outs honoured, burst limits and the SMS quota apply, the "TaScan:" prefix is added, and a list_id appends a tap-to-open checklist link. Use this for reminders (e.g. "log your out time" each show night) — nothing outside TaScan needs to stay awake. Returns the scheduled row id; cancel with tascan_cancel_scheduled_sms while it is still pending. The same idempotency_key within an org returns the existing row instead of a duplicate.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "message",
    "send_at"
  ],
  "properties": {
    "phone": {
      "type": "string",
      "description": "Raw phone (E.164) — must already belong to a worker or roster entry of your org"
    },
    "list_id": {
      "type": "string",
      "description": "Optional task list ID — appends the tap-to-open checklist link"
    },
    "message": {
      "type": "string",
      "description": "Message text (1-400 chars, links stripped). Transactional and work-related only."
    },
    "send_at": {
      "type": "string",
      "description": "When to send — ISO 8601 with a timezone offset, e.g. \"2026-09-25T18:30:00-07:00\" (Las Vegas is -07:00 in September). Delivery happens on the next 5-minute tick at or after this time."
    },
    "worker_id": {
      "type": "string",
      "description": "Worker ID — texts their phone on file (preferred over raw phone)"
    },
    "include_link": {
      "type": "boolean",
      "description": "Append the list link (default true when list_id is given)"
    },
    "idempotency_key": {
      "type": "string",
      "description": "Optional caller key (≤ 200 chars) — replays return the existing scheduled row"
    }
  }
}
tascan_search_marketplace
Declared read-only
Show server-provided details
Server description (copied; language not verified)
Search the cross-org Worker Marketplace: workers who opted in (discoverable=true on their passport), ranked by passkey trust tier + verified completion volume. Skills are AI-inferred from REAL completed work, not resumes — each carries a verified_task_count and a civilian_equivalent job title. Returns sanitized public cards only (first name + last initial, skills, stats, passport URL) — never phone, email, or org membership.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [],
  "properties": {
    "q": {
      "type": "string",
      "description": "Skill, category, name, or civilian job title — e.g. \"forklift\", \"LED wall\", \"AV technician\""
    },
    "city": {
      "type": "string",
      "description": "Filter by the worker's opt-in home city, e.g. \"Las Vegas\""
    },
    "limit": {
      "type": "number",
      "description": "Max cards (default 25, max 50)"
    },
    "available": {
      "type": "boolean",
      "description": "Only workers who marked themselves available on their passport"
    },
    "min_completions": {
      "type": "number",
      "description": "Only workers with at least this many verified completions"
    }
  }
}
tascan_send_sms
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Send a transactional TaScan SMS text to a worker (by worker_id, using their phone on file) or to a raw phone number. Optionally attach a task list — the recipient gets a tap-to-open checklist link. Sends from TaScan's carrier-registered A2P number (or the org's own Twilio if BYOK). Counts against the org's monthly SMS quota unless BYOK. Messages are auto-prefixed with "TaScan:" per carrier registration; transactional/work-related content only, no marketing.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "message"
  ],
  "properties": {
    "phone": {
      "type": "string",
      "description": "Raw phone number (e.g. \"+17025551234\") — used when no worker_id given"
    },
    "list_id": {
      "type": "string",
      "description": "Optional task list ID — appends a tap-to-open worker checklist link"
    },
    "message": {
      "type": "string",
      "description": "Message text. Transactional and work-related only."
    },
    "worker_id": {
      "type": "string",
      "description": "Worker ID — sends to their phone on file (preferred over raw phone)"
    },
    "include_link": {
      "type": "boolean",
      "description": "When a list_id is given, append the tap-to-open link to the SMS body (default true). Set false to send the message text alone — the link is still returned for you to share another way."
    }
  }
}
tascan_send_task_email
Annotation present; effect not classified
Show server-provided details
Server description (copied; language not verified)
Send a branded TaScan task notification email via SendGrid. Can notify anyone about a specific task list or task. Includes QR code, task summary, and "Open in TaScan" button.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "list_id",
    "to_email"
  ],
  "properties": {
    "list_id": {
      "type": "string",
      "description": "Task list (event) ID"
    },
    "message": {
      "type": "string",
      "description": "Optional custom message to include in the email body"
    },
    "subject": {
      "type": "string",
      "description": "Custom email subject (defaults to auto-generated)"
    },
    "task_id": {
      "type": "string",
      "description": "Optional specific task ID to highlight"
    },
    "to_name": {
      "type": "string",
      "description": "Recipient display name"
    },
    "to_email": {
      "type": "string",
      "description": "Recipient email address"
    },
    "include_qr": {
      "type": "boolean",
      "description": "Include QR code for the task list in the email (default: true)"
    }
  }
}
tascan_server_info
Declared read-only
Show server-provided details
Server description (copied; language not verified)
Identify exactly which TaScan server and schema this MCP session is talking to. Call this FIRST when diagnosing anything — it makes "dev server masquerading as production" and "is my fix deployed yet" one tool call instead of an inference.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [],
  "properties": {}
}
tascan_update_event
Declared idempotent
Show server-provided details
Server description (copied; language not verified)
Update an event / task list (name, description, team_mode, multi_instance, timer_mode). team_mode and multi_instance cannot both be true.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "list_id"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "New name"
    },
    "list_id": {
      "type": "string",
      "description": "Task list (event) ID"
    },
    "team_mode": {
      "type": "boolean",
      "description": "Team mode — shared completions"
    },
    "timer_mode": {
      "type": "string",
      "description": "Timer mode (auto or manual)"
    },
    "description": {
      "type": "string",
      "description": "New description"
    },
    "multi_instance": {
      "type": "boolean",
      "description": "Multi-instance — each worker gets isolated copy"
    },
    "assigned_worker_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Worker UUIDs to assign to this event (additive — workers not named are left alone). Each gets a personal tap-to-open link. Note: a worker holds one event assignment per project — assigning moves them."
    }
  }
}
tascan_update_invoice
Declared idempotent
Show server-provided details
Server description (copied; language not verified)
Update an invoice: mark it paid (records paid_at), overdue, cancelled, or edit client details / notes / due date.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "invoice_id"
  ],
  "properties": {
    "notes": {
      "type": "string"
    },
    "status": {
      "enum": [
        "draft",
        "sent",
        "paid",
        "overdue",
        "cancelled"
      ],
      "type": "string"
    },
    "paid_at": {
      "type": "string",
      "description": "ISO timestamp (default now) when status = paid"
    },
    "due_date": {
      "type": "string"
    },
    "invoice_id": {
      "type": "string"
    },
    "client_name": {
      "type": "string"
    },
    "client_email": {
      "type": "string"
    },
    "client_phone": {
      "type": "string"
    }
  }
}
tascan_update_project
Declared idempotent
Show server-provided details
Server description (copied; language not verified)
Update a project (name, location, status, dates)
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "project_id"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "New name"
    },
    "status": {
      "enum": [
        "active",
        "archived"
      ],
      "type": "string",
      "description": "Status"
    },
    "end_date": {
      "type": "string",
      "description": "End date (ISO)"
    },
    "location": {
      "type": "string",
      "description": "New location"
    },
    "project_id": {
      "type": "string",
      "description": "Project ID"
    },
    "start_date": {
      "type": "string",
      "description": "Start date (ISO)"
    }
  }
}
tascan_update_subtask
Declared idempotent
Show server-provided details
Server description (copied; language not verified)
Update a subtask (title, description, response_type, response_config, requires_photo, sort_order).
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "subtask_id"
  ],
  "properties": {
    "title": {
      "type": "string"
    },
    "sort_order": {
      "type": "number"
    },
    "subtask_id": {
      "type": "string",
      "description": "Subtask ID"
    },
    "description": {
      "type": "string"
    },
    "response_type": {
      "enum": [
        "checkbox",
        "number",
        "text",
        "choice"
      ],
      "type": "string"
    },
    "requires_photo": {
      "type": "boolean"
    },
    "response_config": {
      "type": "object"
    }
  }
}
tascan_update_task
Declared idempotent
Show server-provided details
Server description (copied; language not verified)
Update a task (title, description, response_type, flags, sort_order). A task that sits in an AI agent inbox is agent input (the runner executes title + description), so ANY edit to it needs the agent:dispatch permission — agent:dispatch:code when the task is or becomes CODE:/SHELL:.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "task_id"
  ],
  "properties": {
    "title": {
      "type": "string",
      "description": "New title"
    },
    "task_id": {
      "type": "string",
      "description": "Task ID"
    },
    "sort_order": {
      "type": "number",
      "description": "Sort position"
    },
    "assigned_to": {
      "type": "string",
      "description": "Worker to assign this task to — pass the worker UUID (validated against your org and stored as the worker's name, which is how the worker portal matches \"my tasks\"). A plain name string is also accepted as-is. Pass null to clear."
    },
    "description": {
      "type": "string",
      "description": "New description"
    },
    "response_type": {
      "enum": [
        "checkbox",
        "photo",
        "text",
        "number",
        "date",
        "choice"
      ],
      "type": "string",
      "description": "See tascan_add_tasks for guidance. \"text\" for info collection, \"photo\" for visual proof, \"checkbox\" for yes/no only."
    },
    "requires_photo": {
      "type": "boolean",
      "description": "Require photo"
    },
    "response_config": {
      "type": "object",
      "description": "Response configuration. For \"choice\": {options: [...]}. See tascan_add_tasks."
    },
    "required_equipment": {
      "type": "string",
      "description": "Equipment this task depends on (free text)"
    },
    "is_safety_checkpoint": {
      "type": "boolean",
      "description": "Safety-critical flag"
    }
  }
}
tascan_update_worker
Declared idempotent
Show server-provided details
Server description (copied; language not verified)
Update a worker profile (name, phone, email)
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "worker_id"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "New name"
    },
    "email": {
      "type": "string",
      "description": "New email"
    },
    "phone": {
      "type": "string",
      "description": "New phone"
    },
    "worker_id": {
      "type": "string",
      "description": "Worker ID"
    }
  }
}
tascan_update_zone
Declared idempotent
Show server-provided details
Server description (copied; language not verified)
Update a geofenced zone — move the center, resize the radius, change the routing target, toggle zone-lock, or deactivate it (is_active=false).
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "zone_id"
  ],
  "properties": {
    "lat": {
      "type": "number"
    },
    "lng": {
      "type": "number"
    },
    "kind": {
      "enum": [
        "work_site",
        "hazard",
        "containment",
        "restricted"
      ],
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "polygon": {
      "type": "array",
      "items": {
        "type": "array",
        "items": {
          "type": "number"
        }
      },
      "description": "Replace geometry with a polygon ([[lat,lng],...], ≥3 vertices); pass null to revert to a circle"
    },
    "zone_id": {
      "type": "string",
      "description": "Zone ID"
    },
    "radius_m": {
      "type": "number"
    },
    "is_active": {
      "type": "boolean"
    },
    "notify_email": {
      "type": "string"
    },
    "required_ppe": {
      "type": "array",
      "items": {
        "enum": [
          "hard_hat",
          "safety_glasses",
          "hi_vis_vest",
          "gloves",
          "steel_toe_boots",
          "hearing_protection",
          "harness",
          "respirator",
          "face_shield"
        ],
        "type": "string"
      }
    },
    "task_list_id": {
      "type": "string"
    },
    "auto_clock_in": {
      "type": "boolean",
      "description": "Writes a shift_start when the WORKER PAGE, while open, sees the phone enter the zone; detection is pull-based, there is no background geofencing.  For a background-free presence event use a gate NFC/QR scan."
    },
    "enter_message": {
      "type": "string"
    },
    "auto_clock_out": {
      "type": "boolean",
      "description": "Writes a shift_end when the WORKER PAGE, while open, sees the phone leave the zone; detection is pull-based, there is no background geofencing.  For a background-free presence event use a gate NFC/QR scan."
    },
    "notify_on_exit": {
      "type": "boolean"
    },
    "alert_on_breach": {
      "type": "boolean"
    },
    "enforce_on_list": {
      "type": "boolean"
    },
    "notify_on_enter": {
      "type": "boolean"
    },
    "ppe_photo_required": {
      "type": "boolean"
    },
    "sms_worker_on_exit": {
      "type": "boolean"
    },
    "task_list_on_enter": {
      "type": "string"
    },
    "sms_worker_on_enter": {
      "type": "boolean"
    }
  }
}
tascan_zone_compliance
Declared read-only
Show server-provided details
Server description (copied; language not verified)
Hazard-zone compliance audit (OSHA / insurance): every zone crossing, PPE checkpoint verdict (complied / failed with what was missing / skipped), and breach, plus injury reports cross-referenced with the worker's last PPE checkpoint before the injury. Scope by project or zone, optionally by worker and date range. Same rows the printable Evidence Pack shows.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [],
  "properties": {
    "since": {
      "type": "string",
      "description": "ISO date/time lower bound"
    },
    "until": {
      "type": "string",
      "description": "ISO date/time upper bound"
    },
    "zone_id": {
      "type": "string"
    },
    "worker_id": {
      "type": "string"
    },
    "project_id": {
      "type": "string"
    }
  }
}

How to use this MCP

Talandor checks the server; it does not connect the server to your assistant.

Choose your client below, then copy the endpoint or configuration. Authentication is completed with the MCP provider, never inside Talandor.

Open the official client guide (opens in a new tab)
Observation history
Operational
· stable since
2025-11-25 · 79 tools · no change · 2 checks
Unreachable now
No protocol
Operational
· stable since
2025-11-25 · 79 tools · no change · 3 checks
Unreachable now
No protocol
Unreachable now
No protocol
Operational
· stable since
2025-11-25 · 79 tools · no change · 2 checks
Unreachable now
No protocol
Operational
2025-11-25 · 79 tools
Unreachable now
No protocol
Operational
· stable since
2025-11-25 · 79 tools · no change · 2 checks
Complete public contract · 2025-11-25 · 79 tools
649590f43a2f
Complete public contract · 2025-11-25 · 79 tools
d951f97cc508
Complete public contract · 2025-11-25 · 79 tools
877c9e7cb96b

Deep monitoring eligibility

Eligible for deep monitoring

A complete public tools/list contract was observed, so a future deep-monitoring baseline can be compared safely.

Personal Watch is not open yet. This report does not start a Watch or a payment.

See public monitoring
Watch · 9 €/month

Watch this MCP

Your agent depends on this MCP. We tell you before a change breaks it.

  • Know when it goes downWe confirm an outage before we alert you, so a single failed check is not treated as a lasting outage.
  • Know when its contract changesWe compare complete public tool catalogs and authentication surfaces over time.
  • Know what changed and what to fixAn alert names the change and the next step for the client you selected.

Full public-contract coverage: Availability, protocol, auth and public tool contract changes can be compared.

Full WatchAvailability, protocol, auth and public tool contract changes
Surface WatchAvailability, TLS, protocol and auth surface — no private tool diff

When Watch is open, you will be able to add, pause, resume, replace, or remove up to five endpoints. Watch checkout is not open. This page does not start a payment. You can sign in from the header; that creates an account, not a Watch. Opening date: not announced yet. Hosted checkout remains closed.

See Watch price, terms and refunds