TaScan
REMOTE · APP.TASCAN.IO · 2 COMPONENTS
36 MCP tools for projects, tasks, workers, QR/NFC tags, and AI remediation. Task. Scan. Done.
Available components
Last scanned (21 hours ago)
Scores higher than 97% of remote servers
Reachable. Last reached 4 Nov 2026.
Category Project Management
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security94
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability64
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 25772 tokens (~181/item across 142 items; 142 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management99
- Stability check failed: schema churn in the 30 days we've observed: 0 tool removals, 1 breaking changes, 0 auth/transport breaks, 37 additions. See how to fix → Fail
Tool Coverage93
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 79% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 13 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 143 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
- Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 27 Oct 26 0
- New tool “tascan_get_access” functional
- New tool “tascan_append_chat_messages” functional
- New tool “tascan_set_access” functional
- “tascan_update_event” added an optional parameter “access_level” cosmetic
- “tascan_create_event” added an optional parameter “access_level” cosmetic
- “tascan_create_event” added an optional parameter “agent_assignee” cosmetic
- “tascan_update_task” added an optional parameter “access_level” cosmetic
- “tascan_update_event” added an optional parameter “agent_assignee” cosmetic
- 26 Oct 26 0
- New tool “tascan_delete_chat_thread”, which the server declares destructive security
- New tool “tascan_remove_worker_from_project”, which the server declares destructive security
- New tool “tascan_save_qr_style”, which the server declares destructive security
- New tool “tascan_void_completion”, which the server declares destructive security
- Tool “tascan_complete_task” rewrote its description, which is the text the model reads security
- Tool “tascan_update_worker” rewrote its description, which is the text the model reads security
- Tool coverage: 87% → 79% ▼ functional
- Schema quality: excellent → good functional
- New tool “tascan_apply_qr_style” functional
- New tool “tascan_get_org_plan” functional
- New tool “tascan_get_timesheet” functional
- New tool “tascan_list_chat_threads” functional
- New tool “tascan_list_insights” functional
- New tool “tascan_list_qr_styles” functional
- New tool “tascan_nudge_worker” functional
- New tool “tascan_raise_issue” functional
- New tool “tascan_reply_issue” functional
- New tool “tascan_resolve_insight” functional
- New tool “tascan_save_chat_thread” functional
- New tool “tascan_set_template” functional
- New tool “tascan_update_issue” functional
- New tool “tascan_issues_inbox” functional
- “tascan_complete_task” added an optional parameter “on_behalf_of” cosmetic
- “tascan_update_worker” added an optional parameter “active” cosmetic
- “tascan_update_worker” added an optional parameter “reason” cosmetic
- “tascan_complete_task” reworded the description of “worker_id” cosmetic
- “tascan_complete_task” made “worker_id” optional cosmetic
- 25 Oct 26 0
- Stability: pass → fail ▼ security
- A breaking change shipped without a version bump: still 3.19.0 ▼ security
- Tool “tascan_delete_project” rewrote its description, which is the text the model reads security
- Tool “tascan_list_projects” rewrote its description, which is the text the model reads security
- Tool “tascan_update_invoice” rewrote its description, which is the text the model reads security
- Tool “tascan_update_project” rewrote its description, which is the text the model reads security
- “tascan_delete_project” added a required parameter “confirm_name”, so existing callers break ▼ functional
- New tool “tascan_project_insights” functional
- New tool “tascan_clone_project” functional
- New tool “tascan_mint_completion_report” functional
- New tool “tascan_text_report” functional
- New tool “tascan_report_engagement” functional
- “tascan_delete_project” added an optional parameter “audit” cosmetic
- “tascan_list_projects” added an optional parameter “ends_before” cosmetic
- “tascan_list_projects” added an optional parameter “starts_after” cosmetic
- “tascan_list_projects” added an optional parameter “window” cosmetic
- “tascan_list_projects” added an optional parameter “zone” cosmetic
- “tascan_update_project” added an optional parameter “labor_rules” cosmetic
- “tascan_update_project” added an optional parameter “report_options” cosmetic
- 24 Oct 26 −1
- New tool “tascan_unlink_site”, which the server declares destructive security
- Tool “tascan_find” rewrote its description, which is the text the model reads security
- Tool “tascan_generate_qr” rewrote its description, which is the text the model reads security
- Tool “tascan_update_worker” rewrote its description, which is the text the model reads security
- New tool “tascan_create_site” functional
- New tool “tascan_get_site” functional
- New tool “tascan_link_site” functional
- New tool “tascan_list_sites” functional
- New tool “tascan_share_list” functional
- New tool “tascan_today” functional
- New tool “tascan_update_site” functional
- “tascan_generate_qr” added an optional parameter “style” cosmetic
- “tascan_list_workers” added an optional parameter “actor_kind” cosmetic
- “tascan_update_worker” added an optional parameter “actor_kind” cosmetic
- “tascan_find” reworded the description of “query” cosmetic
- 21 Oct 26 0
- Tool “tascan_update_project” rewrote its description, which is the text the model reads security
- Tool “tascan_create_project” rewrote its description, which is the text the model reads security
- Tool “tascan_list_projects” rewrote its description, which is the text the model reads security
- New tool “tascan_get_org” functional
- New tool “tascan_list_connectors” functional
- “tascan_update_project” added an optional parameter “external_refs” cosmetic
- “tascan_update_project” added an optional parameter “number” cosmetic
- “tascan_create_project” added an optional parameter “external_refs” cosmetic
- “tascan_create_project” added an optional parameter “number” cosmetic
- “tascan_list_projects” added an optional parameter “number” cosmetic
- “tascan_list_projects” added an optional parameter “ref” cosmetic
- “tascan_list_projects” added an optional parameter “status” cosmetic
- 12 Oct 26 0
- “tascan_delegate_to_agent” added an optional parameter “model” cosmetic
- “tascan_delegate_to_agent” added an optional parameter “display_name” cosmetic
- “tascan_delegate_to_agent” added an optional parameter “vendor” cosmetic
- “tascan_delegate_to_agent” added an optional parameter “role” cosmetic
- “tascan_delegate_to_agent” added an optional parameter “agent_id” cosmetic
- “tascan_delegate_to_agent” reworded the description of “resource_constraints” cosmetic
6 cosmetic changes on this day. Switch on “Show cosmetic changes” to see them.
- 29 Sept 26 0
- The server rewrote its instructions, which are the text every model session reads security
- New tool “tascan_control_fanout”, which the server declares destructive security
- Schema quality: 16963 → 19576 ▼ functional
- Server version: 3.16.1 → 3.19.0 functional
- New tool “tascan_quickstart” functional
- New tool “tascan_heartbeat_run” functional
- New tool “tascan_claim_run” functional
- New tool “tascan_create_fanout” functional
- New tool “tascan_finish_run” functional
- New tool “tascan_get_fanout” functional
- 28 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 4 Nov 2026 · Probed https://app.tascan.io/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=tascan.io | CN=YE1,O=Let's Encrypt,C=US | 7 Sept 2026 | 6 Dec 2026 | ECDSA 256 | ECDSA-SHA384 | 5b0592230696a03c49a5c4752173414f010 |
| SANs: *.tascan.io, tascan.io | ||||||
| CN=YE1,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 5ddd70dd31f801c85c186a7a04b80afe |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of app.tascan.io. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| io. | present | 38690 | 8 | Verified |
| tascan.io. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer resource_metadata="https://app.tascan.io/.well-known/oauth-protected-resource"
Bearer resource_metadata="https://app.tascan.io/.well-known/oauth-protected-resource" | Header | Value |
|---|---|
| strict-transport-security | max-age=31536000 |
Protected resource metadata
| Document | https://app.tascan.io/.well-known/oauth-protected-resource |
|---|---|
| Retrieved | Yes |
| Resource | https://app.tascan.io/mcp |
| Authorisation server | https://app.tascan.io |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://app.tascan.io/mcp | Verified | 200 | |
| http (plaintext) | http://app.tascan.io/mcp | HTTPS enforced | 301 | https://app.tascan.io/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
tascan_add_subtasks ~136
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.
| Name | Type | Req | Description |
|---|---|---|---|
| subtasks | array | yes | Array of subtasks to create |
| task_id | string | yes | Parent task ID |
No output schema declared.
No examples provided.
tascan_add_tasks ~214
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.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | – | 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 inst… |
| list_id | string | yes | Task list (event) ID |
| tasks | array | yes | Array of tasks to create |
No output schema declared.
No examples provided.
tascan_analyze_issue ~119
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).
| Name | Type | Req | Description |
|---|---|---|---|
| issue_id | string | yes | Issue ID to analyze |
| server_side_ai | boolean | – | If true, the server calls Anthropic API directly for AI analysis (default: false — returns raw data for MCP client to analyze) |
No output schema declared.
No examples provided.
tascan_append_chat_messages ~163
Append 1 or 2 text turns (each a role, user or assistant, and its content) to a chat thread of an admin of your org (POST /chat/threads/:id/messages), the way the portal helper saves each exchange: each content is text of at most 32 KB with no data: URL; the thread's message_count and preview update and GET /chat/threads/:id reads them back in order. A receipted ledger event (the content hashed) is written first. Write tier.
| Name | Type | Req | Description |
|---|---|---|---|
| messages | array | yes | 1-2 turns in order, usually the user message then the assistant reply |
| thread_id | string | yes | The chat thread (tascan_list_chat_threads / tascan_save_chat_thread) |
No output schema declared.
No examples provided.
tascan_apply_qr_style ~121
Apply a saved QR look (qr_style_id, or null to clear) to a project, list, task or site (target + id: PUT on that item), or make it the default for a purpose (target purpose + purpose share, placard, asset, receipt or work_order: PUT /qr-styles/defaults). The look must be your org's. Write tier.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | – | – |
| purpose | string | – | – |
| qr_style_id | string|null | yes | – |
| target | string | yes | – |
No output schema declared.
No examples provided.
tascan_apply_template ~63
Apply a pre-built template to a task list, adding all template tasks
| Name | Type | Req | Description |
|---|---|---|---|
| list_id | string | yes | Task list (event) ID |
| template_slug | string | yes | Template slug (e.g. "conference-load-in", "warehouse-receiving") |
No output schema declared.
No examples provided.
tascan_assess_condition ~124
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.
| Name | Type | Req | Description |
|---|---|---|---|
| asset_id | string | yes | Asset ID (from tascan_register_asset or tascan_list_assets) |
| photo_url | string | yes | Public URL of the assessment photo |
| worker_name | string | – | Who took the photo (optional) |
No output schema declared.
No examples provided.
tascan_auto_resolve ~82
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.
| Name | Type | Req | Description |
|---|---|---|---|
| issue_id | string | yes | Issue ID to auto-resolve |
No output schema declared.
No examples provided.
tascan_cancel_scheduled_sms ~73
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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The scheduled_sms row id from tascan_schedule_sms / tascan_list_scheduled_sms |
No output schema declared.
No examples provided.
tascan_claim_run ~322
Claim a fan-out seat task as a LOCAL subagent run (POST /runs/claim -> claim_agent_run(p_runner='local')). Only admitted when instance starts with "<your registered agent_id>:" -- the seat's own coord.agent_id, set when the fan-out was created (tascan_create_fanout seats[i].runner='local'). Any other instance is refused, claimed false with reason seat_not_yours -- this tool never claims a seat that is not yours, and never claims a cloud (research) seat at all (refused not_routable). Never mints a completion or a receipt by itself -- claiming only opens the run; work happens after, and tascan_finish_run is what leaves the signed receipt. Requires agent:dispatch:code. A foreign or unknown task_id is 404, never 403 (S2: another org's task never even appears to exist).
| Name | Type | Req | Description |
|---|---|---|---|
| instance | string | yes | 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. |
| task_id | string | yes | The seat task ID (UUID) -- from tascan_create_fanout's seats[] or tascan_get_fanout (view=status/report). |
| ttl_seconds | integer | – | Optional lease length in seconds (60-86400, default 1800). Extend it later with tascan_heartbeat_run instead of claiming a longer one up front. |
No output schema declared.
No examples provided.
tascan_clone_project ~171
Duplicate a project's STRUCTURE (POST /projects/:id/clone): its task lists (not a work order's own lists), their tasks (never coordination cards) with response types, photo, safety and signature settings, subtasks, and attachments by reference, plus the location, dates, labor rules and report options. Nothing that happened is copied: no completions, issues, receipts, assignments or access settings. The copy gets the next project number and the name "<name> (copy)" unless you pass one. All or nothing: the copy is one database transaction, so a failure leaves nothing behind. Write tier.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | Name of the copy, 1-200 characters (default "<name> (copy)") |
| project_id | string | yes | The project to copy |
No output schema declared.
No examples provided.
tascan_complete_subtask ~133
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.
| Name | Type | Req | Description |
|---|---|---|---|
| notes | string | – | Optional notes |
| response_value | string | – | Typed response value (for number/text/choice subtasks), e.g. "165" |
| subtask_id | string | yes | Subtask ID to complete |
| worker_id | string | – | Worker performing the completion (optional) |
No output schema declared.
No examples provided.
tascan_complete_task ~294
Complete an ORDINARY task on behalf of a worker. Inserts a completion record and timer event. 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. SR-S2 rules (SR-API3): a key with an agent_id completes only as its own agent_registry worker (any other worker: 403 worker_not_key_owner); a key without one completes on behalf of the named worker (on_behalf_of, or worker_id) only when it is an owner/admin-tier root key, and the completion records on_behalf_of (actor and worker). A delegated key without an agent_id: 403 on_behalf_requires_owner_key.
| Name | Type | Req | Description |
|---|---|---|---|
| notes | string | – | Optional completion notes |
| on_behalf_of | string | – | Worker ID the completion is done on behalf of (for an owner/admin-tier key the same as worker_id; recorded) |
| response_value | string | – | Response value (for text/number/choice tasks) |
| task_id | string | yes | Task ID to complete |
| worker_id | string | – | Worker ID the completion is recorded for (an agent key: omit it, or pass its own worker) |
No output schema declared.
No examples provided.
tascan_condition_history ~55
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.
| Name | Type | Req | Description |
|---|---|---|---|
| asset_id | string | yes | Asset ID |
No output schema declared.
No examples provided.
tascan_control_fanout ~346
Control a running fan-out (POST /coord/fanouts/:id/control). pause holds every unclaimed seat and stops re-firing; resume releases them; cancel supersedes every unclaimed task and closes once quiet; close_barrier drops unsettled (or named exclude_seats) seats and forces the synth now; retry_synth mints a new synth revision from the stored inputs of the current synth when every failed run is input_ref_mismatch, refused otherwise (not_synthesizing, no_synth_task, no_failed_runs, not_input_ref_mismatch). No amend or answer yet. Every action first records a signed control completion as the system worker of this org, never as another org identity. idempotency_key replays the prior outcome (replayed true) and applies nothing twice; a replayed resume after a later pause stays paused. Refused fanout_closed once the roll-up has closed. Requires agent:dispatch:code.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | pause, resume, cancel, close_barrier or retry_synth. No amend, no answer (phase 1). |
| exclude_seats | array | – | close_barrier only: 1-based seat numbers to drop from the barrier instead of waiting for them to settle. |
| fanout_id | string | yes | Fan-out id (UUID) — the T_F root. |
| idempotency_key | string | – | Optional replay key (<= 200 chars). The same key returns the prior outcome (replayed:true) and applies nothing a second time. |
| reason | string | – | Optional free-text reason (<= 4000 chars), recorded on the control child's completion. |
No output schema declared.
No examples provided.
tascan_create_cycle ~1,925
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. T1 (2026-09-24 throughput): kind=review_only mints T1 as CAPTURE: instead — the executor stores the bundle from the repo at HEAD without a model call and the review runs on that; dry_run=true runs the dispatch PREFLIGHT only (nothing queued) and prints every problem at once (codes title_too_long, brief_rule, brief_names_unbundled_path, artifact_over_cap, migration_as_context (tascan repo only), idempotency_replay, kind_invalid — bad kind, bad revisable_by, review_only + task_type SHELL/RESEARCH, review_only + max_questions 0), then what the API could NOT check (unchecked[]: artifact_missing_at_head always — only the executor sees the repo, and a CAPTURE naming a missing path fails with "[artifact_missing_at_head]" in its error; artifact_over_cap for any path without a byte count — pass artifact_bytes; idempotency_replay only if its lookup failed) and warnings[] (a build_brief naming a context file outside the bundle); a real create that the API refuses prints the same problems[] list (when the transport hands the tool only the first problem's text, the tool re-runs the preflight and prints the whole list). 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 (keyless) the same briefs + paths on a live root, within 24 h is refused by the preflight as idempotency_replay (400, nothin…
| Name | Type | Req | Description |
|---|---|---|---|
| artifact_bytes | object | – | 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… |
| artifact_paths | array | yes | 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… |
| build_brief | string | yes | 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 f… |
| checkpoint_description | string | – | Optional description template for the Decision task; the build_ref, preview and findings summary are appended. |
| checkpoint_title | string | – | Optional title template for the Decision task (default "Decision: <title>"). |
| dry_run | boolean | – | 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… |
| idempotency_key | string | – | 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_description | string | – | Optional description template for the Integrate task. |
| integrate_title | string | – | Optional title template for the Integrate task (default "Integrate: <title>"). |
| kind | string | – | 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, siz… |
| max_cost_micro_usd | integer | – | 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). |
| max_questions | integer | – | Questions a runner may ask per task before the attempt fails (default 3). |
| max_revisions | integer | – | Revision cap (default 3): at most max_revisions + 1 builds and reviews. |
| preview_url | string | – | Optional https preview link shown on the Decision task. |
| project_id | string | yes | 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) — otherwis… |
| repo | string | – | 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",… |
| review_brief | string | yes | 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… |
| reviews | array | – | 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-cor… |
| revisable_by | string | – | 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_revisi… |
| task_type | string | – | 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), SHE… |
| title | string | yes | Short human title (1-200 chars). T1 becomes "CODE: <title>" ("CAPTURE: <title>" when kind=review_only), T2 "REVIEW: <title>". |
No output schema declared.
No examples provided.
tascan_create_event ~206
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.
| Name | Type | Req | Description |
|---|---|---|---|
| access_level | string|null | – | SR-S2: open, assigned or secured (null = automatic) |
| agent_assignee | string | – | SR-S2: the agent_id whose key alone may reach this list and its tasks |
| assigned_worker_ids | array | – | 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. |
| description | string | – | Event description |
| multi_instance | boolean | – | Multi-instance — each worker gets isolated copy |
| name | string | yes | Event name |
| project_id | string | yes | Project ID |
| team_mode | boolean | – | Team mode — shared completions |
No output schema declared.
No examples provided.
tascan_create_fanout ~739
Create a fan-out: 1-30 seats (RESEARCH by default, or LOCAL subagent seats) plus one synthesizer under ONE cycle root (POST /coord/fanouts). No Decision cards, Parked cards or pages per seat: only a control action or the closing roll-up reaches a human. Needs an API key with agent:dispatch:code (an admin session has no dispatch budget: key_required). dry_run true runs the same validation and ceiling/cap pre-check and returns dry_run, plan_sha256, seats and problems without spending budget or creating anything. Otherwise it consumes seats + 1 dispatch units BEFORE the create; a refusal only the database can see (cap_below_plan, fanout_open_limit, bad agent_id, reserve_floor_unset) still consumes them, by design. Fails fanout_ceiling_unset until the owner sets a ceiling, over_ceiling when cap exceeds it. idempotency_key replays a duplicate within 24h on the same plan, else idempotency_body_mismatch. Every seat, the synth and the roll-up leave a signed completion. Track with tascan_get_fanout.
| Name | Type | Req | Description |
|---|---|---|---|
| breaker_k | integer | – | Paid (non-infrastructure) seat failures before the breaker pauses the fan-out (2-5, default 2). An expired run never counts. |
| canary | integer | – | How many seats release immediately; the rest stay held on T_F until the first canary settles done. Default min(2, seats.length). |
| cap | integer | yes | This fan-out's total micro-USD budget, synth reserve included. Refused over_ceiling if it exceeds the org's fan-out spending ceiling. |
| deadline_min | integer | – | 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). |
| dry_run | boolean | – | 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… |
| idempotency_key | string | – | 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. |
| min_ok | integer | – | Minimum seats that must finish done before the synth barrier can close. Default ceil(seats.length / 2). |
| project_id | string | yes | Working project (UUID). The fan-out root T_F is minted on its Questions list (coord_ensure_lists). |
| seat_defaults | object | – | Shared defaults applied when a seat names no brief of its own. |
| seat_review | string | – | 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. |
| seats | array | yes | 1-30 seats. Each names the agent that runs it; brief/role fall back to seat_defaults when omitted. |
| synth | object | yes | The synthesizer that runs once the barrier closes, reading every done seat's stored output as DATA. |
| title | string | yes | Short human title (1-200 chars). T_F becomes "FANOUT: <title>"; seats become "RESEARCH: [seat-NN] <title>"; the synth becomes "RESEARCH: [synth] <title>". |
No output schema declared.
No examples provided.
tascan_create_invoice ~586
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.
| Name | Type | Req | Description |
|---|---|---|---|
| attach_service_report | boolean | – | Mint + link a Service Report for single-list invoices (default true) |
| billing | object | – | 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… |
| client_email | string | – | – |
| client_name | string | yes | Bill-to name (person or company) |
| client_phone | string | – | – |
| company_name | string | – | Your company name on the attached Service Report (defaults to the org name) |
| due_date | string | – | YYYY-MM-DD (default: 30 days out) |
| flat_rate_per_list | number | – | Dollars per list for auto line items (used when no hourly_rate) |
| hourly_rate | number | – | Dollars per hour for auto line items |
| line_items | array | – | Explicit lines instead of auto-billing |
| min_hours | number | – | Minimum billable hours per list (e.g. 1) |
| notes | string | – | Payment terms / thank-you shown on the invoice |
| payment_options | object | – | 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… |
| project_id | string | – | Bill every list in this project (auto line items) |
| status | string | – | Default sent |
| task_list_ids | array | – | Bill just these lists (auto line items) |
| tax_rate | number | – | Fraction, e.g. 0.0825 for 8.25% |
No output schema declared.
No examples provided.
tascan_create_project ~191
Create a new TaScan project (top-level container for events). number is optional (the next P-number is assigned when omitted; a number already used in the org is refused 409). external_refs links customer job numbers.
| Name | Type | Req | Description |
|---|---|---|---|
| external_refs | array | – | Up to 10 external references, each { source (1-40 chars, e.g. "EEQ"), ref (1-80 chars, e.g. "P14-4680") } |
| location | string | – | Project location / venue |
| name | string | yes | Project name |
| number | string | – | Project number, 1-40 letters, digits, dot, underscore or hyphen, unique in the org (default: next P-00001 style number). P-<digits> numbers are assigned automatically and refused 400 here; use your o… |
No output schema declared.
No examples provided.
tascan_create_site ~155
Create a site (a job location) in the organization: name (1-200 characters) and optionally address, lat + lng (together), client_company and external_key (unique in your org: a second site with the same key is refused 409). Write tier.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | – | – |
| client_company | string | – | – |
| external_key | string | – | Your own id for the site (e.g. a customer site number), unique in your org |
| lat | number | – | -90 to 90 (send with lng) |
| lng | number | – | -180 to 180 (send with lat) |
| name | string | yes | Site name, 1-200 characters |
No output schema declared.
No examples provided.
tascan_create_worker ~48
Create a new worker (taskee) in the organization
| Name | Type | Req | Description |
|---|---|---|---|
| string | – | ||
| name | string | yes | Worker name |
| phone | string | – | Phone number |
No output schema declared.
No examples provided.
tascan_create_zone ~689
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.
| Name | Type | Req | Description |
|---|---|---|---|
| alert_on_breach | boolean | – | Email + SMS the admin on containment-exit / restricted-enter (default true) |
| auto_clock_in | boolean | – | 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/… |
| auto_clock_out | boolean | – | 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… |
| description | string | – | Shown to workers on the Site Gate page |
| enforce_on_list | boolean | – | Zone-lock the task list — it cannot be started from outside the radius |
| enter_message | string | – | What the worker sees / is texted on entry (default is generated from the rule) |
| kind | string | – | 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. containmen… |
| lat | number | yes | Zone center latitude |
| lng | number | yes | Zone center longitude |
| name | string | yes | Zone name (e.g. "Stage Left", "Loading Dock") |
| notify_email | string | – | Alert recipient override — defaults to all org admins |
| notify_on_enter | boolean | – | Email the manager when a worker enters this zone (danger areas) |
| notify_on_exit | boolean | – | Email the manager when a worker leaves this zone (accountability — sign in then disappear) |
| polygon | array | – | 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. |
| ppe_photo_required | boolean | – | Hazard zones: pop a photo checkpoint on entry (default true when required_ppe is set) |
| project_id | string | – | Project this zone belongs to |
| radius_m | number | – | Radius in meters (default 150, min 10, max 100000) |
| required_ppe | array | – | Hazard zones: PPE the worker must show at entry (pick-list so the audit reads the same words) |
| sms_worker_on_enter | boolean | – | Text the worker the rule/list on entry, even if the app is closed |
| sms_worker_on_exit | boolean | – | Text the worker on exit |
| task_list_id | string | – | Task list the Site Gate routes workers to when they are inside this zone |
| task_list_on_enter | string | – | Task list dispatched to the worker (in-app + SMS) when they cross into the zone |
No output schema declared.
No examples provided.
tascan_delegate_to_agent ~456
Mint a time-limited, NARROWER child API key (POST /delegations, roadmap #11) — only read/write scopes may be requested; full, agent:dispatch, agent:dispatch:code, device:admin, delegate and webhooks:manage are always refused by name (I-6). TTL defaults to 1 hour (3600s), clamps to [60 seconds, 24 hours], and clamps further to THIS key's own expiry if it has one — a delegated key can never outlive its grantor. The child's tier is always a SUBSET of this key's own effective tier, never wider or lateral. Requires the delegate permission (owner-only to grant, requires full). The returned raw key is shown to you exactly ONCE — it is never stored server-side and cannot be retrieved again (I-10). Revoking this key (or any ancestor) cascades immediately to every key it delegated.
| Name | Type | Req | Description |
|---|---|---|---|
| agent_id | string | – | Stable agent id used in receipts and the agent registry. |
| display_name | string | – | Readable id for the agent, e.g. "LT-ZOOS-RSCH-02 · Zoos · Researcher 02". |
| model | string | – | The model the agent runs on, e.g. claude-sonnet-5-5. |
| resource_constraints | object | – | Optional project sandbox: { "project_ids": ["<project uuid>", ...] }. Enforced on every call (migration 249): the child reaches only those projects. Must be a subset of this key’s own projects when t… |
| role | string | – | The agent’s job on the project: builder, researcher, reviewer, panelist, ... |
| scopes | array | yes | Scopes to request for the child key — read and/or write only. |
| ttl_seconds | number | – | How long the child key lives, in seconds (default 3600 = 1h; clamped to [60, 86400] and to this key's own expiry). |
| vendor | string | – | The model vendor (defaults to this key’s own vendor). |
No output schema declared.
No examples provided.
tascan_delete_chat_thread ~55
Delete a chat thread and its messages (DELETE /chat/threads/:id), the way the Simple page does; a receipted ledger event is written first. Write tier.
| Name | Type | Req | Description |
|---|---|---|---|
| thread_id | string | yes | – |
No output schema declared.
No examples provided.
tascan_delete_event ~46
Delete an event (task list) and all its tasks and completions. This action is irreversible.
| Name | Type | Req | Description |
|---|---|---|---|
| list_id | string | yes | Task list (event) ID to delete |
No output schema declared.
No examples provided.
tascan_delete_project ~218
Delete a project that has NO history, after typing its name. Refused 409 project_has_history (with the counts) when it has any task or subtask completion, action receipt, issue, invoice or coordination task: archive it instead (tascan_update_project status archived). confirm_name must equal the project name exactly (400 confirm_name_mismatch). A receipted audit event (actor, project, name, counts, your audit note) is written BEFORE the delete; if it cannot be written nothing is deleted. The check, the audit event and the delete are one database transaction that locks receipts, tasks and the project first, so history created meanwhile is never deleted (503 busy, nothing deleted, when those locks are not had within 3 seconds: retry). Irreversible.
| Name | Type | Req | Description |
|---|---|---|---|
| audit | object | – | Optional audit note stored verbatim in the audit event (e.g. { reason }) |
| confirm_name | string | yes | The project name, typed exactly |
| project_id | string | yes | Project ID to delete |
No output schema declared.
No examples provided.
tascan_delete_subtask ~39
Delete a subtask and its completions. This action is irreversible.
| Name | Type | Req | Description |
|---|---|---|---|
| subtask_id | string | yes | Subtask ID to delete |
No output schema declared.
No examples provided.
tascan_delete_task ~36
Delete a specific task and its completions. This action is irreversible.
| Name | Type | Req | Description |
|---|---|---|---|
| task_id | string | yes | Task ID to delete |
No output schema declared.
No examples provided.
tascan_delete_worker ~65
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.
| Name | Type | Req | Description |
|---|---|---|---|
| worker_id | string | yes | Worker ID to delete |
No output schema declared.
No examples provided.
tascan_dispatch_instruction ~234
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.
| Name | Type | Req | Description |
|---|---|---|---|
| ai_agent | string | – | Name of the AI agent dispatching (default: TaScan AI) |
| instruction | string | yes | Clear, actionable instruction for the worker to execute |
| issue_id | string | yes | Issue ID this instruction relates to |
| recommendation_summary | string | – | One-line summary for the task list description |
| remediation_tasks | array | – | Optional array of tasks to create as a remediation task list. Each: { title, description, response_type, requires_photo, is_safety_checkpoint, sort_order } |
| send_sms | boolean | – | Send SMS to worker (default: true if phone on file) |
| worker_id | string | – | Target worker ID (defaults to the worker who reported the issue) |
No output schema declared.
No examples provided.
tascan_dispatch_to_agent ~328
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).
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | 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 | string | – | Priority level (default: normal). The urgent marker is placed AFTER the routing prefix so it never breaks routing. |
| task | string | yes | 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… |
No output schema declared.
No examples provided.
tascan_dispatcher_action ~249
Record a chief-of-staff dispatcher action on a coordination cycle as a receipt (protocol v0.2 D6, POST /coord/cycles/:root/dispatcher-actions): hand_review_approve, hand_review_revise, park, bundle_recovery, migration_apply, deploy or decision. Mints a completed task + completion under the Chief of Staff worker and a dispatcher_action ledger event on the root. kind=deploy additionally requires evidence.deploy_id (a Netlify deploy id) and composes the same integrate-as-note every root gets with coord_record_integration when the root is authorized — one call that does both records. Requires agent:dispatch.
| Name | Type | Req | Description |
|---|---|---|---|
| evidence | object | – | 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. |
| kind | string | yes | Which dispatcher action this is. |
| root_id | string | yes | The cycle root task id (tascan_list_cycles / tascan_create_cycle). |
| summary | string | yes | Human-readable summary (1-4000 chars) — becomes the recorded completion notes. |
No output schema declared.
No examples provided.
tascan_evidence_policy ~312
Read or author a task's evidence policy (protocol v0.2 V9b, GET|PUT /evidence/policy/:task_id — one route, two methods, so one tool). action=get evaluates the pinned policy against the evidence ledger so far: whether it is usable and satisfied, and its progress (read tier). action=set authors/updates a policy in your org's namespace when definition is given (definition.require is a non-empty array of requirement objects; definition.min_count, when set, must be an integer from 1 through definition.require.length) or, when definition is omitted, pins the task to an existing active policy_id (write tier).
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | get = GET (evaluate, read tier). set = PUT (author/pin, write tier). |
| definition | object | – | 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. |
| policy_id | string | – | action=set only, required: lowercase letters/digits/underscore/dot, starting with a letter, up to 80 chars, e.g. loto_v1. |
| task_id | string | yes | Task ID (UUID) in your organization. |
| version | integer | – | action=set only: optional version for a new/updated policy definition (default 1). Ignored when only pinning an existing policy. |
No output schema declared.
No examples provided.
tascan_find ~137
Cross-entity search: find projects (by name, project number or customer job number in external_refs; each with its status), task lists, tasks, workers, condition assets, sites (by name, address or client company) or work orders (by number or description) in one call — with ids and parent context to disambiguate. Use this instead of walking projects→lists→tasks or guessing ids from display names.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | Search text (min 2 chars, case-insensitive substring; a customer job number matches external_refs exactly) |
| type | string | – | Optional: restrict to one entity type |
No output schema declared.
No examples provided.
tascan_find_duplicate_workers ~145
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.
| Name | Type | Req | Description |
|---|---|---|---|
| include_orphans | boolean | – | Also consider org-less (orphan) worker records — off by default |
| name | string | – | Or: search duplicates by display name |
| threshold | number | – | Min confidence 0-1 (default 0.15) |
| worker_id | string | – | Anchor worker to find duplicates OF (preferred — enables phone + GPS signals) |
No output schema declared.
No examples provided.
tascan_finish_run ~415
Finish a claimed local run (POST /runs/:run_id/finish). outcome='completed' stores `document` (and optional `verification`) as the seat's own build artifacts under EXACTLY the artifact_paths the fan-out named for this seat, hashes them into build_ref, and finishes the run -- this mints a real task_completions row and a SIGNED TASCAN RECEIPT for your work (tascan_get_receipt), the same as any other build; `document` is your deliverable and IS what gets hashed, so send the real content, not a summary. Zero changes to coord_fanout_settle / the barrier / the roll-up -- your completion releases the next held seat and, once every seat settles, feeds the fan-out's own synthesizer and rollup exactly like a cloud research seat's would. outcome='failed' finishes the run failed with your `error` text and stores nothing. Requires agent:dispatch:code. A run outside your org, or already finished, is refused (404 / the RPC's own not_live).
| Name | Type | Req | Description |
|---|---|---|---|
| cost_micro_usd | integer | – | 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). |
| document | string | – | Required when outcome is completed. The seat's deliverable -- hashed as build_ref, stored verbatim under the seat's own artifact_paths. |
| error | string | – | Required when outcome is failed -- why (up to 4000 chars). |
| instance | string | yes | The SAME instance string you claimed with. |
| outcome | string | yes | 'completed' stores your document and mints a signed completion; 'failed' stores nothing. |
| run_id | string | yes | The run ID from tascan_claim_run's response. |
| verification | string | – | Optional second document (a short verification/self-check note) -- stored as the seat's second artifact_path when the fan-out named two. |
No output schema declared.
No examples provided.
tascan_generate_qr ~98
Generate a QR code for a task list (event) that workers can scan to access tasks. TaScan draws the QR itself (an SVG, also returned as a data: URI in qr_image_url); no third-party QR service ever sees the link.
| Name | Type | Req | Description |
|---|---|---|---|
| list_id | string | yes | Task list (event) ID |
| style | string | – | Reserved for saved QR styles (SR-P4c): accepted and ignored today |
No output schema declared.
No examples provided.
tascan_generate_report ~284
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.
| Name | Type | Req | Description |
|---|---|---|---|
| company_name | string | – | Service report branding (defaults to the org name) |
| list_id | string | – | Required for completion / service |
| message | string | – | Service report: a note to the client shown under the header |
| project_id | string | – | Required for project / evidence |
| send_note | string | – | Short intro for the text, e.g. "Here is your report from Love Productions:" |
| send_to_phone | string | – | Text the link to this number (E.164 or 10-digit US) |
| show_issues | boolean | – | Service report: include reported issues (default false) |
| show_workers | boolean | – | Service report: show worker names (default true) |
| type | string | yes | – |
No output schema declared.
No examples provided.
tascan_get_access ~120
Read the access object of a task list (list_id) or a task (task_id): access_level (open, assigned or secured; a task-level value wins over its list), the effective level, human assignees and agent_assignee (the one agent whose key may reach the list and every task on it; a task shows its list's, inherited), and the floor (a Decisions list or a passkey card never goes below assigned). Read tier.
| Name | Type | Req | Description |
|---|---|---|---|
| list_id | string | – | – |
| task_id | string | – | – |
No output schema declared.
No examples provided.
tascan_get_budget ~101
Read THIS credential's own per-key action budget (GET /budget): daily limits (sms, invites, payment-request cents per day and per request, dispatch, human pages) and today's spend against them. A NULL limit (or no budget row at all) means unlimited on that counter. A key can only ever see its OWN budget, never another key's (I-3, no tool or key ever reads another key's row). Read tier.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
tascan_get_build ~181
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.
| Name | Type | Req | Description |
|---|---|---|---|
| build_ref | string | yes | sha256:<64 hex> (or the bare 64 hex) — from tascan_get_task (coord.build_ref / agent.runs[].build_ref) or tascan_get_cycle_report. |
No output schema declared.
No examples provided.
tascan_get_build_diff ~344
Store an already-computed diff for one file of a build bundle against a base commit (protocol v0.2 item 6, POST /coord/builds/:build_ref/diff — the parser has no GET for this path; a deployed function ships no git object database, so tascan-agent/deployer.js computes the diff text with its own persistent worktree and this route only validates + stores it via coord_set_artifact_diff). build_sha256 must equal the artifact's own stored sha256 or the call is refused; storing a diff replaces that file's stored full content with the diff going forward. There is currently no REST route that reads a stored diff back (GET /builds/:build_ref and /builds/:build_ref/file do not surface it) — this tool only writes one. Requires agent:dispatch.
| Name | Type | Req | Description |
|---|---|---|---|
| base_ref | string | yes | The commit-ish the diff was computed against (1-200 chars). |
| base_sha256 | string | – | Optional 64-hex sha256 of the file at base_ref. |
| build_ref | string | yes | sha256:<64 hex> (or the bare 64 hex) of the build the diff is about. |
| build_sha256 | string | yes | 64-hex sha256 of the file at build_ref/path — must match the stored artifact's own sha256. |
| path | string | yes | Repo-relative path from the build manifest (tascan_get_build). |
| text | string | yes | The already-computed diff text (up to 262144 characters). This tool never computes a diff itself. |
| truncated | boolean | – | True if text is itself a truncated diff. |
No output schema declared.
No examples provided.
tascan_get_build_file ~219
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.
| Name | Type | Req | Description |
|---|---|---|---|
| build_ref | string | yes | sha256:<64 hex> (or the bare 64 hex). |
| limit | integer | – | Characters to return (1-12000, default 12000). |
| offset | integer | – | Character offset to start from (default 0). |
| path | string | yes | Repo-relative path exactly as listed by tascan_get_build. |
No output schema declared.
No examples provided.
tascan_get_cycle_report ~261
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.
| Name | Type | Req | Description |
|---|---|---|---|
| full | boolean | – | true = the complete report JSON (tasks, runs, completions, messages, events, bundles, chains) after the summary, capped at 12000 chars. Default: summary only. |
| root_id | string | yes | 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). |
No output schema declared.
No examples provided.
tascan_get_device ~60
Get one device by id: kind, name, status, location zone, credential rotation timestamps, revocation reason, and the last 20 evidence_events ids it produced. Never returns a credential hash.
| Name | Type | Req | Description |
|---|---|---|---|
| device_id | string | yes | Device ID |
No output schema declared.
No examples provided.
tascan_get_event ~38
Get details of a specific event (task list) including its tasks
| Name | Type | Req | Description |
|---|---|---|---|
| list_id | string | yes | Task list (event) ID |
No output schema declared.
No examples provided.
tascan_get_fanout ~240
Read a fan-out (GET /coord/fanouts/:id?view=). view=status (default): state, seat counts, spend, cap, synth_deadline_at, poll_after_s. view=report: the full cycle report (get_cycle_report) — every seat, review and control step. view=rollup: the exact roll-up response_value plus its leaves (path, sha256, completion_id) once closed. view=verify: the server recomputes rollup_ref over the frozen leaves and returns ok / mismatches — the same check scripts/verify-fanout.js performs independently from another machine, which is the trusted proof; this view is a convenience, not a substitute. A foreign org's fanout_id answers 404, never 403, so another org's fan-out never even appears to exist. Read tier, no dispatch permission required.
| Name | Type | Req | Description |
|---|---|---|---|
| fanout_id | string | yes | Fan-out id (UUID) — the T_F root, from tascan_create_fanout or tascan_list_cycles. |
| view | string | – | status (default), report, rollup or verify. |
No output schema declared.
No examples provided.
tascan_get_org ~74
Read the organization profile (GET /org): id, name, industry, logo, time zone and the admin phone MASKED to its last 4 digits (a tool never sees the full number). Read tier. Editing the organization is done by an owner or admin in the TaScan portal, not by any tool.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
tascan_get_org_plan ~50
Your organization's plan (GET /org/plan), read-only: plan (free, pro, ...) and whether billing is exempt. Billing changes happen in the TaScan portal only. Read tier.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
How do I install the TaScan MCP server?
TaScan is a hosted endpoint at https://app.tascan.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · app.tascan.io
claude mcp add --transport http snowbikemike-tascan-mcp 'https://app.tascan.io/mcp'
What is the TaScan MCP server?
TaScan is an MCP server listed in the public MCP registry as io.github.snowbikemike/tascan-mcp. 36 MCP tools for projects, tasks, workers, QR/NFC tags, and AI remediation. Task. Scan. Done. This page covers its hosted endpoint (https://app.tascan.io/mcp).
Is the TaScan MCP server safe to use?
TaScan scores 89 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the TaScan MCP server expose?
TaScan exposes 142 tools: tascan_list_projects, tascan_create_project, tascan_get_project, tascan_update_project, tascan_delete_project, and 137 more. Their descriptions and schemas cost roughly 25,684 tokens of context every time the server is loaded.
Does the TaScan MCP server require authentication?
Yes. TaScan asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.
Is the TaScan MCP server still maintained?
TaScan is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.