TaScan
Qué hace este MCP
Manages field-service projects, workers, task lists, subtasks, dispatch, geofenced work zones, inspections, remediation workflows, reports, QR access, and invoicing.
Herramientas
Esquema de entrada
{'type': 'object', 'required': ['task_id', 'subtasks'], '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', 'link', 'url', 'file'], 'type': 'string', 'description': 'Default checkbox. "number" for per-set values. "choice" needs response_config.options. "link" = the worker submits a URL. "url" = the worker visits a preset URL and confirms. "file" = the worker uploads a file.'}, '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'}}}
Esquema de entrada
{'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', 'link', 'url', 'file'], 'type': 'string', 'description': 'Typed subtask response. "number" for per-set values (reps/weight), "text" for notes, "choice" needs response_config.options. "link" = the worker submits a URL. "url" = the worker visits a preset URL and confirms. "file" = the worker uploads a file. 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', 'link', 'url', 'file'], '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). "link" = the worker SUBMITS a URL (auto-verified by an http probe). "url" = the worker VISITS a preset URL and confirms. "file" = the worker uploads a file. 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'}, 'idempotency_key': {'type': 'string', 'description': 'B1: optional replay key (up to 1024 chars, no braces) sent verbatim as the Idempotency-Key header instead of a fresh one per call — a retried call with the SAME key replays the original response instead of creating the tasks twice.'}}}
Esquema de entrada
{'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)'}}}
Esquema de entrada
{'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")'}}}
Esquema de entrada
{'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)'}}}
Esquema de entrada
{'type': 'object', 'required': ['issue_id'], 'properties': {'issue_id': {'type': 'string', 'description': 'Issue ID to auto-resolve'}}}
Esquema de entrada
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The scheduled_sms row id from tascan_schedule_sms / tascan_list_scheduled_sms'}}}
Esquema de entrada
{'type': 'object', 'required': ['task_id', 'instance'], 'properties': {'task_id': {'type': 'string', 'description': "The seat task ID (UUID) -- from tascan_create_fanout's seats[] or tascan_get_fanout (view=status/report)."}, 'instance': {'type': 'string', 'description': 'Your claim identity, "<agent_id>:<anything>" -- e.g. "researcher-07:host-1234". Must start with the seat\'s own registered agent_id or the claim is refused seat_not_yours.'}, 'ttl_seconds': {'type': 'integer', 'description': 'Optional lease length in seconds (60-86400, default 1800). Extend it later with tascan_heartbeat_run instead of claiming a longer one up front.'}}}
Esquema de entrada
{'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"'}}}
Esquema de entrada
{'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)'}}}
Esquema de entrada
{'type': 'object', 'required': ['asset_id'], 'properties': {'asset_id': {'type': 'string', 'description': 'Asset ID'}}}
Esquema de entrada
{'type': 'object', 'required': ['fanout_id', 'action'], 'properties': {'action': {'enum': ['pause', 'resume', 'cancel', 'close_barrier', 'retry_synth'], 'type': 'string', 'description': 'pause, resume, cancel, close_barrier or retry_synth. No amend, no answer (phase 1).'}, 'reason': {'type': 'string', 'description': "Optional free-text reason (<= 4000 chars), recorded on the control child's completion."}, 'fanout_id': {'type': 'string', 'description': 'Fan-out id (UUID) — the T_F root.'}, 'exclude_seats': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'close_barrier only: 1-based seat numbers to drop from the barrier instead of waiting for them to settle.'}, 'idempotency_key': {'type': 'string', 'description': 'Optional replay key (<= 200 chars). The same key returns the prior outcome (replayed:true) and applies nothing a second time.'}}}
Esquema de entrada
{'type': 'object', 'required': ['project_id', 'title', 'build_brief', 'review_brief', 'artifact_paths'], 'properties': {'kind': {'enum': ['build', 'review_only'], 'type': 'string', 'description': 'Cycle kind (default build). review_only = no model builds anything: T1 is "CAPTURE: <title>", a local-executor task that stores artifact_paths from the repo at HEAD as the bundle (same build_ref, size cap and scope check as a CODE build) and completes in seconds; T2 REVIEW then reviews that bundle. Use it to get an independent review of documents or of code already committed by hand. Stored as coord.kind_of_cycle on the root.'}, '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>" ("CAPTURE: <title>" when kind=review_only), T2 "REVIEW: <title>".'}, 'dry_run': {'type': 'boolean', 'description': 'true = PREFLIGHT only: the API validates the whole dispatch and returns every problem at once (code, path, detail) plus the unchecked[] list (what only the executor / the RPC can decide) and warnings[] — nothing is queued, no idempotency key is consumed. Recommended before every real create. Default false.'}, 'reviews': {'type': 'array', 'items': {'type': 'object', 'required': ['lens', 'brief', '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', 'RESEARCH'], 'type': 'string', 'description': 'T1 prefix (default CODE). CAPTURE is never caller-settable: kind=review_only makes T1 "CAPTURE:" itself. With kind=review_only the value is sent as given — CODE is accepted (T1 is still CAPTURE), SHELL / RESEARCH are refused by the API as kind_invalid.'}, '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)."}, 'revisable_by': {'enum': ['dispatcher', 'executor'], 'type': 'string', 'description': 'review_only cycles only — who fixes a revise verdict. dispatcher (default): the cycle parks on revise as today and you re-dispatch. executor: a revise spawns a revision CAPTURE task (up to max_revisions) that is born blocked on a question task "Revise the documents, then answer to release" addressed to you — fix the files in the repo, answer that question (tascan_post_message kind=answer), and the capture re-runs on the fixed HEAD. Build cycles always revise through the executor regardless of this field.'}, '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_bytes': {'type': 'object', 'description': 'Optional {path: bytes} for artifact_paths — the byte length of each file in your checkout. The API cannot read the repo, so artifact_over_cap (262144-byte reviewable cap per file) is only checked for paths you give a byte count; every other path is reported under unchecked (artifact_over_cap, unchecked_at_api) — never guessed from an earlier stored bundle. Same on dry_run and the real create.', 'additionalProperties': {'type': 'integer'}}, '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 is refused as idempotency_replay (nothing queued) and printed as DUPLICATE with the existing root_id — safe to retry after a lost answer.'}, '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.'}}}
Esquema de entrada
{'type': 'object', 'required': ['project_id', 'name'], '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.'}}}
Esquema de entrada
{'type': 'object', 'required': ['project_id', 'title', 'seats', 'synth', 'cap'], 'properties': {'cap': {'type': 'integer', 'description': "This fan-out's total micro-USD budget, synth reserve included. Refused over_ceiling if it exceeds the org's fan-out spending ceiling."}, 'seats': {'type': 'array', 'items': {'type': 'object', 'required': ['agent_id'], 'properties': {'role': {'type': 'string', 'description': 'Optional label for this seat (1-100 chars), e.g. "topic A".'}, 'brief': {'type': 'string', 'description': "This seat's own prompt (1-40000 chars). Falls back to seat_defaults.brief when omitted -- one of the two is required."}, 'runner': {'enum': ['research', 'local'], 'type': 'string', 'description': 'Default "research" (the cloud runner claims it). "local" names a registered local/subagent agent_id -- only that agent, claiming as itself (tascan_claim_run instance starting with "<agent_id>:"), can claim the seat; it is never webhook-fired.'}, 'agent_id': {'type': 'string', 'description': 'A registered agent_registry id in this org, matching ^[a-z][a-z0-9-]{0,39}$. Never a system-* worker.'}}}, 'description': '1-30 seats. Each names the agent that runs it; brief/role fall back to seat_defaults when omitted.'}, 'synth': {'type': 'object', 'required': ['brief', 'max_cost_micro_usd'], 'properties': {'brief': {'type': 'string', 'description': "The synthesizer's prompt (1-40000 chars)."}, 'max_cost_micro_usd': {'type': 'integer', 'description': 'Positive integer micro-USD reserved for the synth run; reserved out of cap up front, released back into the seat budget only at barrier close.'}}, 'description': "The synthesizer that runs once the barrier closes, reading every done seat's stored output as DATA."}, 'title': {'type': 'string', 'description': 'Short human title (1-200 chars). T_F becomes "FANOUT: <title>"; seats become "RESEARCH: [seat-NN] <title>"; the synth becomes "RESEARCH: [synth] <title>".'}, 'canary': {'type': 'integer', 'description': 'How many seats release immediately; the rest stay held on T_F until the first canary settles done. Default min(2, seats.length).'}, 'min_ok': {'type': 'integer', 'description': 'Minimum seats that must finish done before the synth barrier can close. Default ceil(seats.length / 2).'}, 'dry_run': {'type': 'boolean', 'description': 'true runs the same validation plus the ceiling/cap pre-check and returns {dry_run:true, plan_sha256, seats, problems:[]} WITHOUT consuming budget or creating a fan-out -- a real preflight, not a real create.'}, 'breaker_k': {'type': 'integer', 'description': 'Paid (non-infrastructure) seat failures before the breaker pauses the fan-out (2-5, default 2). An expired run never counts.'}, 'project_id': {'type': 'string', 'description': 'Working project (UUID). The fan-out root T_F is minted on its Questions list (coord_ensure_lists).'}, 'seat_review': {'enum': ['per_seat', 'none'], 'type': 'string', 'description': 'per_seat mints one review per seat (allowed for at most 10 seats); none skips seat review. Default per_seat for <=10 seats, none above that.'}, 'deadline_min': {'type': 'integer', 'description': 'Minutes before an idle seat is dropped and the barrier re-evaluated, and before a stuck synthesizing fan-out closes deadline (10-1440, default 240).'}, 'seat_defaults': {'type': 'object', 'required': ['est_micro_usd'], 'properties': {'brief': {'type': 'string', 'description': 'Default seat prompt (1-40000 chars), used by any seat that names no brief of its own.'}, 'est_micro_usd': {'type': 'integer', 'description': "Positive integer micro-USD estimate per seat, used by the RPC's cap_below_plan check."}, 'review_est_micro_usd': {'type': 'integer', 'description': 'Non-negative integer micro-USD estimate per seat review. Must be > 0 when seat_review is per_seat.'}}, 'description': 'Shared defaults applied when a seat names no brief of its own.'}, 'idempotency_key': {'type': 'string', 'description': 'Optional replay key (<= 200 chars). The same key within 24h on the same plan returns duplicate:true with the existing fanout_id; on a different plan it is refused idempotency_body_mismatch.'}}}
Esquema de entrada
{'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': ['description', 'amount'], '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)'}}}
Esquema de entrada
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'Project name'}, 'location': {'type': 'string', 'description': 'Project location / venue'}}}
Esquema de entrada
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'Worker name'}, 'email': {'type': 'string', 'description': 'Email'}, 'phone': {'type': 'string', 'description': 'Phone number'}}}
Esquema de entrada
{'type': 'object', 'required': ['name', 'lat', 'lng'], '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'}}}
Esquema de entrada
{'type': 'object', 'required': ['scopes'], 'properties': {'scopes': {'type': 'array', 'items': {'enum': ['read', 'write'], 'type': 'string'}, 'description': 'Scopes to request for the child key — read and/or write only.'}, 'ttl_seconds': {'type': 'number', 'description': "How long the child key lives, in seconds (default 3600 = 1h; clamped to [60, 86400] and to this key's own expiry)."}, 'resource_constraints': {'type': 'object', 'description': 'Optional free-form narrowing (e.g. project/list ids) recorded on the child key as metadata.'}}}
Esquema de entrada
{'type': 'object', 'required': ['list_id'], 'properties': {'list_id': {'type': 'string', 'description': 'Task list (event) ID to delete'}}}
Esquema de entrada
{'type': 'object', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'description': 'Project ID to delete'}}}
Esquema de entrada
{'type': 'object', 'required': ['subtask_id'], 'properties': {'subtask_id': {'type': 'string', 'description': 'Subtask ID to delete'}}}
Esquema de entrada
{'type': 'object', 'required': ['task_id'], 'properties': {'task_id': {'type': 'string', 'description': 'Task ID to delete'}}}
Esquema de entrada
{'type': 'object', 'required': ['worker_id'], 'properties': {'worker_id': {'type': 'string', 'description': 'Worker ID to delete'}}}
Esquema de entrada
{'type': 'object', 'required': ['root_id', 'kind', 'summary'], 'properties': {'kind': {'enum': ['hand_review_approve', 'hand_review_revise', 'park', 'bundle_recovery', 'migration_apply', 'deploy', 'decision'], 'type': 'string', 'description': 'Which dispatcher action this is.'}, 'root_id': {'type': 'string', 'description': 'The cycle root task id (tascan_list_cycles / tascan_create_cycle).'}, 'summary': {'type': 'string', 'description': 'Human-readable summary (1-4000 chars) — becomes the recorded completion notes.'}, 'evidence': {'type': 'object', 'description': 'Optional evidence object (serializes to at most 8000 chars). For kind=deploy this must include deploy_id: 24 lowercase hex, optionally prefixed deployed: and/or followed by a build-ref hex prefix.'}}}
Esquema de entrada
{'type': 'object', 'required': ['issue_id', 'instruction'], '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'}}}
Esquema de entrada
{'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.'}}}
Esquema de entrada
{'type': 'object', 'required': ['action', 'task_id'], 'properties': {'action': {'enum': ['get', 'set'], 'type': 'string', 'description': 'get = GET (evaluate, read tier). set = PUT (author/pin, write tier).'}, 'task_id': {'type': 'string', 'description': 'Task ID (UUID) in your organization.'}, 'version': {'type': 'integer', 'description': 'action=set only: optional version for a new/updated policy definition (default 1). Ignored when only pinning an existing policy.'}, 'policy_id': {'type': 'string', 'description': 'action=set only, required: lowercase letters/digits/underscore/dot, starting with a letter, up to 80 chars, e.g. loto_v1.'}, 'definition': {'type': 'object', 'description': 'action=set only, optional: policy definition to create or update — require (array, required), min_count, window, any_of, allow_fallback. Omit to pin the task to the existing active policy_id instead.'}}}
Esquema de entrada
{'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)'}}}
Esquema de entrada
{'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'}}}
Esquema de entrada
{'type': 'object', 'required': ['run_id', 'instance', 'outcome'], 'properties': {'error': {'type': 'string', 'description': 'Required when outcome is failed -- why (up to 4000 chars).'}, 'run_id': {'type': 'string', 'description': "The run ID from tascan_claim_run's response."}, 'outcome': {'enum': ['completed', 'failed'], 'type': 'string', 'description': "'completed' stores your document and mints a signed completion; 'failed' stores nothing."}, 'document': {'type': 'string', 'description': "Required when outcome is completed. The seat's deliverable -- hashed as build_ref, stored verbatim under the seat's own artifact_paths."}, 'instance': {'type': 'string', 'description': 'The SAME instance string you claimed with.'}, 'verification': {'type': 'string', 'description': "Optional second document (a short verification/self-check note) -- stored as the seat's second artifact_path when the fan-out named two."}, 'cost_micro_usd': {'type': 'integer', 'description': "Optional micro-USD cost to record against the cycle's own budget (default 0 -- a Claude Code subscription seat has no per-call API cost to report)."}}}
Esquema de entrada
{'type': 'object', 'required': ['list_id'], 'properties': {'list_id': {'type': 'string', 'description': 'Task list (event) ID'}}}
Esquema de entrada
{'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)'}}}
Esquema de entrada
{'type': 'object', 'properties': {}}
Esquema de entrada
{'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.'}}}
Esquema de entrada
{'type': 'object', 'required': ['build_ref', 'path', 'base_ref', 'text', 'build_sha256'], 'properties': {'path': {'type': 'string', 'description': 'Repo-relative path from the build manifest (tascan_get_build).'}, 'text': {'type': 'string', 'description': 'The already-computed diff text (up to 262144 characters). This tool never computes a diff itself.'}, 'base_ref': {'type': 'string', 'description': 'The commit-ish the diff was computed against (1-200 chars).'}, 'build_ref': {'type': 'string', 'description': 'sha256:<64 hex> (or the bare 64 hex) of the build the diff is about.'}, 'truncated': {'type': 'boolean', 'description': 'True if text is itself a truncated diff.'}, 'base_sha256': {'type': 'string', 'description': 'Optional 64-hex sha256 of the file at base_ref.'}, 'build_sha256': {'type': 'string', 'description': "64-hex sha256 of the file at build_ref/path — must match the stored artifact's own sha256."}}}
Esquema de entrada
{'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).'}}}
Esquema de entrada
{'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).'}}}
Esquema de entrada
{'type': 'object', 'required': ['device_id'], 'properties': {'device_id': {'type': 'string', 'description': 'Device ID'}}}
Esquema de entrada
{'type': 'object', 'required': ['list_id'], 'properties': {'list_id': {'type': 'string', 'description': 'Task list (event) ID'}}}
Esquema de entrada
{'type': 'object', 'required': ['fanout_id'], 'properties': {'view': {'enum': ['status', 'report', 'rollup', 'verify'], 'type': 'string', 'description': 'status (default), report, rollup or verify.'}, 'fanout_id': {'type': 'string', 'description': 'Fan-out id (UUID) — the T_F root, from tascan_create_fanout or tascan_list_cycles.'}}}
Esquema de entrada
{'type': 'object', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'description': 'Project ID'}}}
Esquema de entrada
{'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'}}}
Esquema de entrada
{'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)'}}}
Esquema de entrada
{'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'}}}
Esquema de entrada
{'type': 'object', 'required': ['twilio_sid'], 'properties': {'twilio_sid': {'type': 'string', 'description': 'Twilio message SID (SM...) from tascan_send_sms'}}}
Esquema de entrada
{'type': 'object', 'required': ['task_id'], 'properties': {'task_id': {'type': 'string', 'description': 'Task ID'}}}
Esquema de entrada
{'type': 'object', 'required': ['task_id'], 'properties': {'kinds': {'type': 'string', 'description': 'Optional comma-separated kind filter, e.g. question,answer,handoff,note (discussion is stored as note; both names are accepted).'}, 'task_id': {'type': 'string', 'description': 'Task ID (UUID).'}}}
Esquema de entrada
{'type': 'object', 'properties': {'by_key': {'type': 'boolean', 'description': 'Break coordination spend down per dispatch-scoped API key -- owner admin session only.'}, 'period': {'type': 'string', 'description': 'Billing period as YYYY-MM (default: current UTC month).'}}}
Esquema de entrada
{'type': 'object', 'required': ['worker_id'], 'properties': {'worker_id': {'type': 'string', 'description': 'Worker ID'}}}
Esquema de entrada
{'type': 'object', 'required': ['worker_id'], 'properties': {'worker_id': {'type': 'string', 'description': 'Worker ID'}}}
Esquema de entrada
{'type': 'object', 'required': ['run_id', 'instance'], 'properties': {'run_id': {'type': 'string', 'description': "The run ID from tascan_claim_run's response."}, 'instance': {'type': 'string', 'description': 'The SAME instance string you claimed with -- a mismatch answers not_live.'}, 'extend_seconds': {'type': 'integer', 'description': 'Optional: push expires_at out to now + this many seconds (60-86400) if that is later than the current lease -- never shortens it.'}}}
Esquema de entrada
{'type': 'object', 'required': ['worker_id', 'list_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'}}}
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {}}
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {'project_id': {'type': 'string', 'description': 'Filter by project'}}}
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'description': 'Max rows to return (default 50, max 200).'}, 'status': {'type': 'string', 'description': 'Optional cycle status to filter on (e.g. active, parked, authorized, integrated) — lowercase letters and underscores only, 1-20 chars.'}, 'project_id': {'type': 'string', 'description': "Optional project UUID to filter to one project's cycles."}}}
Esquema de entrada
{'type': 'object', 'properties': {}}
Esquema de entrada
{'type': 'object', 'properties': {'kind': {'enum': ['rfid_portal', 'barcode', 'nfc_reader', 'tool', 'plc', 'camera', 'robot', 'sensor', 'other'], 'type': 'string', 'description': 'Filter by device kind'}, 'limit': {'type': 'number', 'description': 'Max rows to return (1-200, default 50)'}, 'cursor': {'type': 'string', 'description': 'Opaque cursor from a previous response next_cursor'}, 'status': {'enum': ['active', 'revoked'], 'type': 'string', 'description': 'Filter by device status'}}}
Esquema de entrada
{'type': 'object', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'description': 'Project ID'}}}
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {'status': {'enum': ['pending', 'accepted', 'declined', 'expired', 'failed'], 'type': 'string'}}}
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {'status': {'enum': ['draft', 'sent', 'paid', 'overdue', 'cancelled'], 'type': 'string'}, 'project_id': {'type': 'string'}}}
Esquema de entrada
{'type': 'object', 'required': ['list_id'], 'properties': {'list_id': {'type': 'string', 'description': 'Task list (event) ID'}}}
Esquema de entrada
{'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'}}}
Esquema de entrada
{'type': 'object', 'properties': {}}
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {'list_id': {'type': 'string'}, 'project_id': {'type': 'string'}}}
Esquema de entrada
{'type': 'object', 'properties': {'status': {'enum': ['pending', 'sending', 'sent', 'failed', 'cancelled'], 'type': 'string', 'description': 'Filter by status (default pending + sending)'}}}
Esquema de entrada
{'type': 'object', 'required': ['task_id'], 'properties': {'task_id': {'type': 'string', 'description': 'Parent task ID'}}}
Esquema de entrada
{'type': 'object', 'properties': {}}
Esquema de entrada
{'type': 'object', 'required': ['list_id'], 'properties': {'list_id': {'type': 'string', 'description': 'Task list (event) ID'}}}
Esquema de entrada
{'type': 'object', 'properties': {'category': {'type': 'string', 'description': 'Filter by category (e.g. "live-events", "hospitality", "logistics")'}}}
Esquema de entrada
{'type': 'object', 'required': ['completion_id'], 'properties': {'completion_id': {'type': 'string', 'description': 'task_completions.id (UUID) — from tascan_get_task -> completions[].id.'}}}
Esquema de entrada
{'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'}}}
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {'project_id': {'type': 'string', 'description': 'Filter by project'}}}
Esquema de entrada
{'type': 'object', 'required': ['primary_worker_id', 'duplicate_worker_ids'], '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)'}}}
Esquema de entrada
{'type': 'object', 'required': ['view'], 'properties': {'view': {'enum': ['org', 'resolutions'], 'type': 'string', 'description': 'Which analytics surface to read.'}, 'limit': {'type': 'integer', 'description': 'resolutions only: page size (default 50, max 200).'}, 'offset': {'type': 'integer', 'description': 'resolutions only: page offset.'}, 'pattern': {'type': 'boolean', 'description': 'resolutions only: true to filter to pattern_detected rows only.'}, 'category': {'type': 'string', 'description': 'resolutions only: filter by issue_category.'}, 'severity': {'type': 'string', 'description': 'resolutions only: filter by classification_severity.'}}}
Esquema de entrada
{'type': 'object', 'required': ['actor', 'action', 'object', 'occurred_at', 'idempotency_key'], 'properties': {'actor': {'type': 'object', 'required': ['kind', 'id'], 'properties': {'id': {'type': 'string', 'description': "The actor's id."}, 'kind': {'enum': ['worker', 'agent', 'device'], 'type': 'string', 'description': 'worker requires an active, unmerged worker id in your organization; agent/device ids are recorded as given.'}}, 'description': 'Who did it.'}, 'action': {'type': 'string', 'description': 'What happened, e.g. inspected, scanned, calibrated.'}, 'object': {'type': 'object', 'required': ['kind', 'ref'], 'properties': {'ref': {'type': 'string', 'description': 'The object reference (asset id, tag id, serial number, or URL).'}, 'kind': {'enum': ['asset', 'tag', 'serial', 'url'], 'type': 'string', 'description': 'What kind of thing object.ref names.'}}, 'description': 'What it happened to.'}, 'location': {'type': 'object', 'properties': {'lat': {'type': 'number'}, 'lng': {'type': 'number'}, 'zone_id': {'type': 'string', 'description': 'Optional geofence zone UUID.'}}, 'description': 'Optional location.'}, 'provenance': {'type': 'object', 'description': 'Optional provenance object. provenance.kind first_party_scan is written only by the scan_events trigger and is refused from a caller; provenance.signature triggers device-signature verification.'}, 'correlation': {'type': 'object', 'properties': {'task_id': {'type': 'string', 'description': 'A task UUID in your organization to correlate this evidence to.'}, 'task_list_id': {'type': 'string', 'description': 'A task list UUID in your organization to correlate this evidence to (used when task_id is absent or does not resolve).'}}, 'description': 'Optional correlation hint.'}, 'occurred_at': {'type': 'string', 'description': 'ISO timestamp for when the event actually happened.'}, 'idempotency_key': {'type': 'string', 'description': 'Required, 1-200 chars. The same key on the same org replays the same stored row.'}}}
Esquema de entrada
{'type': 'object', 'required': ['task_id', 'kind', 'body'], '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.'}}}
Esquema de entrada
{'type': 'object', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'description': 'Project ID (UUID).'}}}
Esquema de entrada
{'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'}}}
Esquema de entrada
{'type': 'object', 'properties': {'expected': {'type': 'string', 'description': 'The exact text the task asks for (default "VERIFIED", max 200 chars).'}, 'response': {'type': 'string', 'description': 'The response to submit (default: the expected text). A different value is refuted.'}}}
Esquema de entrada
{'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 }'}}}
Esquema de entrada
{'type': 'object', 'required': ['root_id', 'deploy_id'], 'properties': {'note': {'type': 'string', 'description': 'Optional note (≤ 2000 chars) recorded alongside the completion — e.g. what changed in this deploy.'}, 'root_id': {'type': 'string', 'description': 'The cycle root = the T1 build task id (tascan_get_cycle_report / tascan_create_cycle). Must currently be authorized (checkpoint Approved, Integrate task open).'}, 'deploy_id': {'type': 'string', 'description': 'The Netlify deploy id: 24 lowercase hex, optionally prefixed "deployed:" and/or followed by a space and a ≥12-hex prefix of the build_ref.'}}}
Esquema de entrada
{'type': 'object', 'required': ['id', 'name', 'type', 'inbox_id', 'capabilities'], '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"])'}}}
Esquema de entrada
{'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'}}}
Esquema de entrada
{'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'}}}
Esquema de entrada
{'type': 'object', 'required': ['parent_list_id', 'title', 'tasks'], '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', 'link', 'url', 'file'], 'type': 'string', 'description': '"date" for scheduling windows, "text" for info requests, "choice" needs response_config.options. "link" = the worker submits a URL. "url" = the worker visits a preset URL and confirms. "file" = the worker uploads a file.'}, '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'}}}
Esquema de entrada
{'type': 'object', 'required': ['task_list_id', 'worker_id', 'amount_cents', 'payer_email'], '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'}, 'idempotency_key': {'type': 'string', 'description': 'B1: optional replay key (up to 1024 chars, no braces) sent verbatim as the Idempotency-Key header instead of a fresh one per call — a retried call with the SAME key replays the original pledge instead of creating a second one.'}}}
Esquema de entrada
{'type': 'object', 'required': ['completion_id', 'check_type', 'params'], 'properties': {'params': {'type': 'object', 'description': 'For http_probe: url, and optionally expect_status, expect_content_type, expect_sha256. For doc_check: url and policy_id, where policy_id names an active doc_check policy.'}, 'run_at': {'type': 'string', 'description': 'Optional ISO timestamp to schedule the job for (default now).'}, 'check_type': {'enum': ['http_probe', 'doc_check'], 'type': 'string', 'description': 'Which autonomous check to run.'}, 'completion_id': {'type': 'string', 'description': 'task_completions.id (UUID) — from tascan_get_task -> completions[].id.'}, 'idempotency_key': {'type': 'string', 'description': 'Optional replay key (up to 200 chars).'}}}
Esquema de entrada
{'type': 'object', 'required': ['key_id'], 'properties': {'key_id': {'type': 'string', 'description': 'The delegated key id to revoke (from tascan_list_delegations)'}}}
Esquema de entrada
{'type': 'object', 'required': ['device_id'], 'properties': {'reason': {'type': 'string', 'description': 'Why this device is being revoked (up to 500 characters)'}, 'device_id': {'type': 'string', 'description': 'Device ID to revoke'}}}
Esquema de entrada
{'type': 'object', 'required': ['send_at', 'message'], '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'}}}
Esquema de entrada
{'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'}}}
Esquema de entrada
{'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.'}, 'idempotency_key': {'type': 'string', 'description': 'B1: optional replay key (up to 1024 chars, no braces) sent verbatim as the Idempotency-Key header instead of a fresh one per call — a retried call with the SAME key replays the original response instead of sending a second text.'}}}
Esquema de entrada
{'type': 'object', 'required': ['to_email', 'list_id'], '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)'}}}
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {}}
Esquema de entrada
{'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.'}}}
Esquema de entrada
{'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'}}}
Esquema de entrada
{'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)'}}}
Esquema de entrada
{'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', 'link', 'url', 'file'], 'type': 'string', 'description': '"link" = the worker submits a URL. "url" = the worker visits a preset URL and confirms. "file" = the worker uploads a file.'}, 'requires_photo': {'type': 'boolean'}, 'response_config': {'type': 'object'}}}
Esquema de entrada
{'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', 'link', 'url', 'file'], 'type': 'string', 'description': 'See tascan_add_tasks for guidance. "text" for info collection, "photo" for visual proof, "checkbox" for yes/no only, "link" for the worker submitting a URL, "url" for the worker visiting a preset URL and confirming, "file" for the worker uploading a file.'}, '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'}}}
Esquema de entrada
{'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'}}}
Esquema de entrada
{'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'}}}
Esquema de entrada
{'type': 'object', 'required': ['jws'], 'properties': {'jws': {'type': 'string', 'description': "The compact JWS to verify (from tascan_get_receipt's output, or any TaScan-format receipt)."}}}
Esquema de entrada
{'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'}}}
Cambios recientes en herramientas
Servidores MCP similares
freedom-mcp
Supports company operations through commitments, teams, agents, customer evidence, leads, content workflows, spreadsheets, commer…
Stable Baseline
Manages company documents, knowledge graphs, whiteboards, projects, plans, tasks, teams, and improvement workflows.
mcp
Manages Nestr workspaces, roles, circles, tensions, governance proposals, comments, daily plans, graph relationships, agents, and…
Tango
Manages shared work between humans and agents through tasks, leases, handoffs, approvals, artifacts, comments, integrations, prog…
AIOProductOS MCP
Combines customer records, support conversations, feedback, product analytics, roadmaps, tasks, experiments, releases, and retent…
agendaforge
Manages events, agendas, sessions, speakers, attendees, sponsors, forms, contacts, email templates, approvals, and organizer work…
Refine Job Search
Tracks job applications, interviews, offers, recruiter email, and company openings, with Gmail synchronization and workflow actio…
Chronary
Manages calendars, availability, events, scheduling proposals, booking pages, human calendar connections, and webhooks.