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 (6 hours ago)
Scores higher than 97% of remote servers
Reachable. Last reached 5 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 5 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=YE2,O=Let's Encrypt,C=US | 5 Nov 2026 | 3 Feb 2027 | ECDSA 256 | ECDSA-SHA384 | 6963312024d405e7636a83cd4c6f381807c |
| SANs: *.tascan.io, tascan.io | ||||||
| CN=YE2,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 4df3b15dd6c0784c507cd37b58e6f115 |
| 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_query_responses ~151
Query one task's submitted responses across every list in a project — e.g. the same exercise repeated across many workout lists returns one chronological progression series instead of N report lookups. Match by task title pattern or exact task ID. Subtask completions interleave into the same series labeled 'Task › Subtask' (e.g. per-set values Set 1/2/3 with their own timestamps), so set-level progression chains across lists automatically.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Max responses to return (default 200, max 500) |
| project_id | string | yes | Project ID |
| task | string | yes | Task title pattern (case-insensitive substring) or exact task ID |
No output schema declared.
No examples provided.
tascan_quickstart ~201
One action to a genuinely verified receipt (POST /quickstart). Under your org it reuses-or-creates the project "TaScan Quickstart", its list "Quickstart" and the worker "Quickstart executor", adds a NEW task "Reply with the exact text: <expected>", completes it with your key, has the named policy quickstart_exact_output v1 compare the response to the expected text (verified or refuted, signed into the receipt), and publishes the receipt's public profile. expected defaults to "VERIFIED" (max 200 chars); response defaults to expected — pass a different response to see a refuted receipt. Returns the receipt URL and the public verify URL. Write tier.
| Name | Type | Req | Description |
|---|---|---|---|
| expected | string | – | The exact text the task asks for (default "VERIFIED", max 200 chars). |
| response | string | – | The response to submit (default: the expected text). A different value is refuted. |
No output schema declared.
No examples provided.
tascan_raise_issue ~146
Raise an issue on a task (POST /tasks/:id/issues), the way an admin does it in TaScan: status OPEN, source admin, the description as the first thread message. category DELAY, MISSING_MATERIALS, SAFETY_CONCERN, EQUIPMENT_ISSUE, WEATHER, PERSONNEL, QUALITY or OTHER (default); severity LOW, MEDIUM (default), HIGH or CRITICAL. Write tier.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | – | – |
| description | string | yes | – |
| photo_path | string | – | A task-photos storage path under issues/ (upload first) |
| severity | string | – | – |
| task_id | string | yes | – |
No output schema declared.
No examples provided.
tascan_recommend_fix ~176
Step 2 of the Closed-Loop Autonomous Operations Protocol. Post an AI-generated recommendation to an issue thread. Accepts both a text recommendation and an optional structured_recommendation object with task definitions for auto-dispatch. The recommendation is persisted in the AI audit trail.
| Name | Type | Req | Description |
|---|---|---|---|
| ai_agent | string | – | Name of the AI agent posting (default: TaScan AI) |
| issue_id | string | yes | Issue ID to recommend a fix for |
| recommendation | string | yes | The AI-generated recommendation text (clear, actionable instructions) |
| structured_recommendation | object | – | Optional structured recommendation with tasks for auto-dispatch. Format: { recommendation_summary, confidence_score, tasks: [{ title, description, response_type, requires_photo, is_safety_checkpoint,… |
No output schema declared.
No examples provided.
tascan_record_integration ~359
D4: the dispatcher records the Netlify deploy id for an authorized cycle — Integrate cards stop landing on Mike for something a key can prove instead (protocol v0.2, migration 181, coord_record_integration). Requires agent:dispatch. The root must be `authorized` (its checkpoint already Approved) with an open Integrate task; deploy_id must be a real Netlify deploy id — 24 lowercase hex, optionally "deployed:<id>" and/or a trailing build-ref hex prefix ("Deploy" and anything else is refused, bad_deploy_id). On success the root flips to `integrated`, the existing "Integrated: deploy …" trail note is posted, and the completion is stamped with your key as the actor (source api:key:<id>) — never as a human on the page. Idempotent: replaying the SAME deploy_id after the root is already integrated returns the same completion (replayed:true); a DIFFERENT deploy_id after integration is refused (409) without changing anything. A human may still complete the Integrate card on the worker page as an ops fallback, but only with a real deploy id too.
| Name | Type | Req | Description |
|---|---|---|---|
| deploy_id | string | yes | 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. |
| note | string | – | Optional note (≤ 2000 chars) recorded alongside the completion — e.g. what changed in this deploy. |
| root_id | string | yes | The cycle root = the T1 build task id (tascan_get_cycle_report / tascan_create_cycle). Must currently be authorized (checkpoint Approved, Integrate task open). |
No output schema declared.
No examples provided.
tascan_register_agent ~234
Register a new AI agent in the agent registry. The agent will appear in tascan_list_agents and can receive dispatched tasks. Self-registration for AI agents joining the TaScan network. REQUIRES the agent:dispatch permission (defining a dispatch target is a dispatch permission); inbox_id must be a task list (event) in your organization.
| Name | Type | Req | Description |
|---|---|---|---|
| capabilities | array | yes | Task type prefixes this agent handles (e.g. ["RESEARCH", "WRITE"]) |
| description | string | – | What this agent does |
| id | string | yes | Unique agent ID (e.g. "my-agent-1") |
| inbox_id | string | yes | Task list ID this agent monitors for new tasks |
| location | string | – | Where the agent runs (e.g. "AWS us-east-1") |
| model | string | – | Model powering this agent (e.g. "claude-sonnet-4-6") |
| name | string | yes | Display name (e.g. "Research Bot") |
| type | string | yes | Agent type |
| worker_id | string | – | TaScan worker ID for this agent |
No output schema declared.
No examples provided.
tascan_register_asset ~138
Register a physical asset (equipment, structure, vehicle, machine) in the condition ledger so it can be assessed over time. Each asset gets a longitudinal condition history with AI scoring and degradation trajectory.
| Name | Type | Req | Description |
|---|---|---|---|
| asset_type | string | – | Type (e.g. "LED processor", "forklift", "scaffold") |
| description | string | – | Context the AI assessor should know |
| location_description | string | – | – |
| name | string | yes | Asset name (e.g. "LED Wall Processor #3") |
| project_id | string | – | – |
| serial_number | string | – | Serial number or asset tag (unique per org) |
No output schema declared.
No examples provided.
tascan_register_tag ~185
Register a physical NFC tag to a project, task list, or specific task. When someone taps the tag, TaScan routes them to the linked resource. Tags use NTAG215 chips and are programmed with NFC Tools Pro.
| Name | Type | Req | Description |
|---|---|---|---|
| location_description | string | – | Physical location of the tag |
| project_id | string | – | Project ID |
| tag_hardware_id | string | yes | NFC tag hardware serial number (e.g., "04:CB:6C:51:CE:2A:81") |
| tag_name | string | yes | Friendly name (e.g., "Ballroom A Door", "Breaker Panel 3") |
| target_type | string | yes | What this tag points to |
| task_id | string | – | Task ID (required for task targets) |
| task_list_id | string | – | Task list ID (required for task_list/task targets) |
No output schema declared.
No examples provided.
tascan_remove_worker_from_project ~105
Remove a worker from a project (DELETE /projects/:id/workers/:worker_id): deletes only that worker's assignments on the project's lists. Completions, issues and the worker record are untouched. Receipted first (actor, worker, lists, reason). To deactivate the worker everywhere use tascan_update_worker active false. Write tier.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | – |
| reason | string | – | – |
| worker_id | string | yes | – |
No output schema declared.
No examples provided.
tascan_reply_issue ~88
Reply on an issue's thread (POST /issues/:id/messages): an issue_messages row from the admin side. media_path attaches a photo already uploaded to task-photos under issues/ (a storage path, never a URL). Write tier.
| Name | Type | Req | Description |
|---|---|---|---|
| body | string | yes | 1-4000 characters |
| issue_id | string | yes | – |
| media_path | string | – | – |
No output schema declared.
No examples provided.
tascan_reply_with_list ~177
Reply to a task list WITH a task list — the two-way tasking primitive. Creates a new list linked into the parent's thread, aimed back at whoever sent the original (e.g. "Grant access — pick a window" with response_type date, or an info request with response_type text). The org gets pinged; the thread shows in both the worker portal and Simple Mode. Use tascan_get_thread-style follow-up via tascan_list_projects/tascan_get_report to read answers.
| Name | Type | Req | Description |
|---|---|---|---|
| author_name | string | – | Who is replying (shown in the thread) |
| parent_list_id | string | yes | The list being replied to |
| tasks | array | yes | Items the recipient answers — each becomes a typed task |
| title | string | yes | Reply list title (e.g. "Before I can start...") |
No output schema declared.
No examples provided.
tascan_report_engagement ~66
A report's engagement (GET /reports/:token/engagement, get_report_engagement): declared, engaged and idle minutes per worker shift on the report's list. There are no view or open counts. Read tier.
| Name | Type | Req | Description |
|---|---|---|---|
| token | string | yes | The report token |
No output schema declared.
No examples provided.
tascan_request_payment ~242
Pledge a payment on a task list: when the list is verified complete (every task done + photo evidence on photo-required tasks), the payer automatically receives a Stripe pay link that routes the money DIRECTLY to the worker (0% TaScan fee). No money moves and no card is stored at pledge time. The worker must have completed payout onboarding (Get Paid on their profile).
| Name | Type | Req | Description |
|---|---|---|---|
| amount_cents | number | yes | Amount in cents ($1 min, $10,000 max) |
| 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 pledge instea… |
| memo | string | – | What the payment is for (shown to the payer) |
| payer_email | string | yes | Who pays — receives the pay link on verification |
| payer_name | string | – | – |
| task_list_id | string | yes | Task list the payment is tied to |
| worker_id | string | yes | Worker who gets paid |
No output schema declared.
No examples provided.
tascan_request_verification ~220
Enqueue an autonomous verification job for a task completion (Verification Layer V2 + V7 doc_check, POST /completions/:completion_id/verification-jobs): http_probe checks a URL (params url, and optionally expect_status, expect_content_type, expect_sha256), doc_check runs a named policy against params.url and params.policy_id. Read the result with tascan_list_verifications once the job runs. Write tier.
| Name | Type | Req | Description |
|---|---|---|---|
| check_type | string | yes | Which autonomous check to run. |
| completion_id | string | yes | task_completions.id (UUID) — from tascan_get_task -> completions[].id. |
| idempotency_key | string | – | Optional replay key (up to 200 chars). |
| params | object | yes | 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 | string | – | Optional ISO timestamp to schedule the job for (default now). |
No output schema declared.
No examples provided.
tascan_resolve_insight ~113
Apply or dismiss an AI Insight (POST /insights/:id/apply or /dismiss), with the Simple page's status writes (applied / dismissed, an optional dismiss reason). Apply marks it applied and returns the suggestion (title, body, action) for you to carry out; it runs no AI and changes nothing else. Only a pending (or explained) insight. Write tier.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| insight_id | string | yes | – |
| reason | string | – | – |
No output schema declared.
No examples provided.
tascan_revoke_delegation ~118
Revoke a delegated child key immediately (DELETE /delegations/:key_id) — self-revoke, revoke by an ancestor key, or by an admin session of the org; any other caller is refused. Revoking cascades to every key IT delegated, in turn (the database trigger, not application code). Idempotent: revoking an already-revoked key reports already_revoked, no error.
| Name | Type | Req | Description |
|---|---|---|---|
| key_id | string | yes | The delegated key id to revoke (from tascan_list_delegations) |
No output schema declared.
No examples provided.
tascan_revoke_device ~129
Revoke a device credential immediately — the kill switch for a lost, stolen, or decommissioned device (RFID portal, barcode gun, PLC, camera, robot, tool, sensor). Its next evidence post is refused. Idempotent: revoking an already-revoked device reports already_revoked and mints no second receipt. Requires the device:admin permission (owner-only, needs full, never reachable through OAuth).
| Name | Type | Req | Description |
|---|---|---|---|
| device_id | string | yes | Device ID to revoke |
| reason | string | – | Why this device is being revoked (up to 500 characters) |
No output schema declared.
No examples provided.
tascan_save_chat_thread ~96
Create a chat thread for an admin of your org (no thread_id: POST /chat/threads with admin_id and an optional title, default New Chat) or rename one (thread_id: PUT /chat/threads/:id with title and/or preview). Write tier.
| Name | Type | Req | Description |
|---|---|---|---|
| admin_id | string | – | – |
| preview | string | – | – |
| thread_id | string | – | – |
| title | string | – | – |
No output schema declared.
No examples provided.
tascan_save_qr_style ~141
Create a saved QR look (no qr_style_id: POST /qr-styles), change one (PUT /qr-styles/:id) or delete one (delete true). style is a flat JSON object of the QR options; a logo is a storage path in your org's logo folder (<org id>/qr/<file>), never a data: URL. is_default true makes it the org default (the previous default is cleared). Write tier.
| Name | Type | Req | Description |
|---|---|---|---|
| delete | boolean | – | – |
| is_default | boolean | – | – |
| name | string | – | – |
| qr_style_id | string | – | – |
| style | object | – | – |
No output schema declared.
No examples provided.
tascan_schedule_sms ~379
Schedule a transactional TaScan SMS for a future time (up to 90 days out): the text is sent by TaScan's own scheduler (every 5 minutes) through the same guarded lane as tascan_send_sms — recipient must be a worker of your org or a phone the org already knows, STOP opt-outs honoured, burst limits and the SMS quota apply, the "TaScan:" prefix is added, and a list_id appends a tap-to-open checklist link. Use this for reminders (e.g. "log your out time" each show night) — nothing outside TaScan needs to stay awake. Returns the scheduled row id; cancel with tascan_cancel_scheduled_sms while it is still pending. The same idempotency_key within an org returns the existing row instead of a duplicate.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | – | Optional caller key (≤ 200 chars) — replays return the existing scheduled row |
| include_link | boolean | – | Append the list link (default true when list_id is given) |
| list_id | string | – | Optional task list ID — appends the tap-to-open checklist link |
| message | string | yes | Message text (1-400 chars, links stripped). Transactional and work-related only. |
| phone | string | – | Raw phone (E.164) — must already belong to a worker or roster entry of your org |
| send_at | string | yes | 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 | string | – | Worker ID — texts their phone on file (preferred over raw phone) |
No output schema declared.
No examples provided.
tascan_search_marketplace ~207
Search the cross-org Worker Marketplace: workers who opted in (discoverable=true on their passport), ranked by passkey trust tier + verified completion volume. Skills are AI-inferred from REAL completed work, not resumes — each carries a verified_task_count and a civilian_equivalent job title. Returns sanitized public cards only (first name + last initial, skills, stats, passport URL) — never phone, email, or org membership.
| Name | Type | Req | Description |
|---|---|---|---|
| available | boolean | – | Only workers who marked themselves available on their passport |
| city | string | – | Filter by the worker's opt-in home city, e.g. "Las Vegas" |
| limit | number | – | Max cards (default 25, max 50) |
| min_completions | number | – | Only workers with at least this many verified completions |
| q | string | – | Skill, category, name, or civilian job title — e.g. "forklift", "LED wall", "AV technician" |
No output schema declared.
No examples provided.
tascan_send_sms ~492
Send a transactional TaScan SMS text to a worker (by worker_id, using their phone on file) or to a raw phone number. Optionally attach a task list — the recipient gets a tap-to-open checklist link. Attach images (MMS) with media_url (public https image URL) or media_base64 + media_type (jpeg/png/gif, max 3.5 MB) — e.g. a diagram, a tutorial photo or a site photo; the message text is optional when an image is attached. Sends from TaScan's carrier-registered A2P number (or the org's own Twilio if BYOK). Counts against the org's monthly SMS quota unless BYOK. Messages are auto-prefixed with "TaScan:" per carrier registration; transactional/work-related content only, no marketing.
| 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… |
| include_link | boolean | – | 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. |
| list_id | string | – | Optional task list ID — appends a tap-to-open worker checklist link |
| media_base64 | string | – | Optional image to attach (MMS) as base64 bytes (a data: URI prefix is accepted). JPEG, PNG or GIF, max 3.5 MB. Stored privately by TaScan and sent through a short-lived link. |
| media_type | string | – | MIME type of media_base64 (not needed when media_base64 is a data: URI). |
| media_url | string | – | Optional image to attach (MMS): a public https URL of a JPEG, PNG or GIF. The carrier fetches it at send time. |
| message | string | – | Message text. Transactional and work-related only. |
| phone | string | – | Raw phone number (e.g. "+17025551234") — used when no worker_id given |
| worker_id | string | – | Worker ID — sends to their phone on file (preferred over raw phone) |
No output schema declared.
No examples provided.
tascan_send_task_email ~154
Send a branded TaScan task notification email via SendGrid. Can notify anyone about a specific task list or task. Includes QR code, task summary, and "Open in TaScan" button.
| Name | Type | Req | Description |
|---|---|---|---|
| include_qr | boolean | – | Include QR code for the task list in the email (default: true) |
| list_id | string | yes | Task list (event) ID |
| message | string | – | Optional custom message to include in the email body |
| subject | string | – | Custom email subject (defaults to auto-generated) |
| task_id | string | – | Optional specific task ID to highlight |
| to_email | string | yes | Recipient email address |
| to_name | string | – | Recipient display name |
No output schema declared.
No examples provided.
tascan_server_info ~58
Identify exactly which TaScan server and schema this MCP session is talking to. Call this FIRST when diagnosing anything — it makes "dev server masquerading as production" and "is my fix deployed yet" one tool call instead of an inference.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
tascan_set_access ~243
Set the security level of a task list (list_id) or a task (task_id): access_level (open, assigned, secured or null), human_assignees (worker ids, lists only) and agent_assignee (an agent_id of your org, or null; lists only: a task follows its list and refuses it as task_agent_assignee_unsupported). Raising it needs any write key that can see the item; lowering it or removing an assignee needs an owner/admin-tier key (an agent key is refused lower_requires_admin); a Decisions list or a passkey card never goes below assigned. The change and its access_changed ledger event are one transaction (all or nothing); access_conflict when the item changed meanwhile. Write tier.
| Name | Type | Req | Description |
|---|---|---|---|
| access_level | string|null | – | – |
| agent_assignee | string|null | – | Lists only: the agent_id whose key alone may reach the list and every task on it, or null |
| human_assignees | array | – | Lists only: the full set of assigned worker ids (replaces the current set) |
| list_id | string | – | – |
| task_id | string | – | – |
No output schema declared.
No examples provided.
tascan_set_template ~89
Share a task list as a template (shared true: POST /templates/:list_id) or remove it from your templates (shared false: DELETE, receipted; the list itself is untouched). Returns template_url, the share link (template.html?id=). List reads carry the same template_url. Write tier.
| Name | Type | Req | Description |
|---|---|---|---|
| list_id | string | yes | – |
| shared | boolean | yes | – |
No output schema declared.
No examples provided.
tascan_share_list ~182
Get a task list's share link and its QR code (an SVG drawn by TaScan; no third-party QR service), and optionally send the link to one person: send.phone or send.worker_id texts it through TaScan's guarded SMS lane (recipient must be known to your org, STOP opt-outs and limits apply), send.email e-mails it. Write tier for the link; sending needs the full access level. style is reserved for saved QR styles and ignored today.
| Name | Type | Req | Description |
|---|---|---|---|
| list_id | string | yes | Task list (event) ID |
| send | object | – | Optional: send the link to ONE recipient — { phone } or { worker_id } (text) or { email }, plus an optional message (at most 300 characters) |
| style | string | – | Reserved for saved QR styles (SR-P4c): accepted and ignored today |
No output schema declared.
No examples provided.
tascan_text_report ~137
Text an existing report's link to a phone (POST /reports/:token/text) through the guarded SMS lane: the number must belong to a worker or roster entry of your org, burst limits, the SMS quota and STOP opt-outs apply, and the report's task list proves ownership. token is the report token (tascan_mint_completion_report / tascan_generate_report). Full tier (it sends to a person).
| Name | Type | Req | Description |
|---|---|---|---|
| note | string | – | Optional short intro, at most 160 characters |
| phone | string | yes | E.164 or 10-digit US number |
| token | string | yes | The report token |
No output schema declared.
No examples provided.
tascan_today ~155
The organization's Today summary (GET /today), counted exactly like the portal's Today: due_today, closed_today, awaiting_check, retake, photos_verified_7d and the needs list (each item's first reason of retake, issue, review, overdue, due_today). Archived, completed and demo projects never count (demo only with demo=true). The day is in zone (an IANA zone), else the org time zone, else UTC (timezone_fallback true). Read tier.
| Name | Type | Req | Description |
|---|---|---|---|
| demo | boolean | – | Count demo / test projects too (default false) |
| zone | string | – | IANA time zone for the day boundary, e.g. America/Los_Angeles (default: the org time zone) |
No output schema declared.
No examples provided.
tascan_unlink_site ~75
Remove a site's link to a project (project_id) or to a task list (list_id) — exactly one. The site, the project and the list themselves are not changed. Write tier.
| Name | Type | Req | Description |
|---|---|---|---|
| list_id | string | – | – |
| project_id | string | – | – |
| site_id | string | yes | – |
No output schema declared.
No examples provided.
tascan_update_event ~233
Update an event / task list (name, description, team_mode, multi_instance, timer_mode). team_mode and multi_instance cannot both be true.
| Name | Type | Req | Description |
|---|---|---|---|
| access_level | string|null | – | SR-S2: raise freely; lowering needs an owner/admin-tier key (tascan_set_access rules) |
| agent_assignee | string|null | – | SR-S2: the agent_id whose key alone may reach this list, or null (removing one needs an owner/admin-tier key) |
| assigned_worker_ids | array | – | 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. |
| description | string | – | New description |
| list_id | string | yes | Task list (event) ID |
| multi_instance | boolean | – | Multi-instance — each worker gets isolated copy |
| name | string | – | New name |
| team_mode | boolean | – | Team mode — shared completions |
| timer_mode | string | – | Timer mode (auto or manual) |
No output schema declared.
No examples provided.
tascan_update_invoice ~166
Update an invoice: mark it paid (records paid_at; a receipted ledger event with the actor, invoice id, number, amount and the before/after status is written first, and nothing changes if it cannot be), overdue, cancelled, or edit client details / notes / due date. A paid invoice is final: any further change is refused 409 invoice_paid_locked (no refunds, edits or deletes).
| Name | Type | Req | Description |
|---|---|---|---|
| client_email | string | – | – |
| client_name | string | – | – |
| client_phone | string | – | – |
| due_date | string | – | – |
| invoice_id | string | yes | – |
| notes | string | – | – |
| paid_at | string | – | ISO timestamp (default now) when status = paid |
| status | string | – | – |
No output schema declared.
No examples provided.
tascan_update_issue ~76
Change an issue's status (PUT /issues/:id): OPEN, ACKNOWLEDGED, IN_PROGRESS, RESOLVED or CLOSED. RESOLVED stamps resolved_at; a status message joins the thread. The issue is never deleted. Write tier.
| Name | Type | Req | Description |
|---|---|---|---|
| issue_id | string | yes | – |
| status | string | yes | – |
No output schema declared.
No examples provided.
tascan_update_project ~337
Update a project (name, location, status, dates, number, external_refs, labor_rules, report_options). A number already used in the org is refused 409; external_refs replaces the whole list. report_options is merged into the stored object (other keys kept, a key set to null removed). labor_rules is validated like the projects CHECK.
| Name | Type | Req | Description |
|---|---|---|---|
| end_date | string | – | End date (ISO) |
| external_refs | array | – | The full list of external references (replaces the current one): up to 10 { source (1-40 chars), ref (1-80 chars) } |
| labor_rules | object | – | An object (or null to clear): { ot_after_hours (> 0, <= 24, or null), dt_after_hours (> ot_after_hours, or > 10 when that is null, <= 24, or null) } |
| location | string | – | New location |
| name | string | – | New name |
| number | string | – | New project number, 1-40 letters, digits, dot, underscore or hyphen, unique in the org. A P-<digits> number is refused 400 unless it is the project's current number |
| project_id | string | yes | Project ID |
| report_options | object | – | Merged into the stored options: show_location, show_time, auto_publish_receipts (booleans), client_photos (off | on | ask); a key set to null is removed; null clears them all |
| start_date | string | – | Start date (ISO) |
| status | string | – | Status |
No output schema declared.
No examples provided.
tascan_update_site ~117
Update a site (name, address, lat + lng, client_company, external_key, is_active). is_active false deactivates it (the soft delete: its links, work orders and visits stay). Write tier.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | – | – |
| client_company | string | – | – |
| external_key | string | – | – |
| is_active | boolean | – | – |
| lat | number | – | – |
| lng | number | – | – |
| name | string | – | – |
| site_id | string | yes | Site ID |
No output schema declared.
No examples provided.
tascan_update_subtask ~122
Update a subtask (title, description, response_type, response_config, requires_photo, sort_order).
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | – |
| requires_photo | boolean | – | – |
| response_config | object | – | – |
| response_type | string | – | "link" = the worker submits a URL. "url" = the worker visits a preset URL and confirms. "file" = the worker uploads a file. |
| sort_order | number | – | – |
| subtask_id | string | yes | Subtask ID |
| title | string | – | – |
No output schema declared.
No examples provided.
tascan_update_task ~337
Update a task (title, description, response_type, flags, sort_order). A task that sits in an AI agent inbox is agent input (the runner executes title + description), so ANY edit to it needs the agent:dispatch permission — agent:dispatch:code when the task is or becomes CODE:/SHELL:.
| Name | Type | Req | Description |
|---|---|---|---|
| access_level | string|null | – | SR-S2: the task's own level (null = inherit the list); lowering needs an owner/admin-tier key |
| assigned_to | string | – | 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 accep… |
| description | string | – | New description |
| is_safety_checkpoint | boolean | – | Safety-critical flag |
| required_equipment | string | – | Equipment this task depends on (free text) |
| requires_photo | boolean | – | Require photo |
| response_config | object | – | Response configuration. For "choice": {options: [...]}. See tascan_add_tasks. |
| response_type | string | – | 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… |
| sort_order | number | – | Sort position |
| task_id | string | yes | Task ID |
| title | string | – | New title |
No output schema declared.
No examples provided.
tascan_update_worker ~207
Update a worker profile (name, phone, email, actor_kind), or deactivate / reactivate the worker (active false / true with an optional reason: receipted as a ledger event first, never a delete; a merged record is never reactivated). Changing actor_kind to or from agent or admin is refused for every key: only an org owner or admin, signed in to the portal, can do that.
| Name | Type | Req | Description |
|---|---|---|---|
| active | boolean | – | SR-API3: false deactivates the worker, true reactivates it (receipted) |
| actor_kind | string | – | What this worker row stands for (to or from agent / admin: owner or admin session only) |
| string | – | New email | |
| name | string | – | New name |
| phone | string | – | New phone |
| reason | string | – | Why (recorded with an active change; at most 500 characters) |
| worker_id | string | yes | Worker ID |
No output schema declared.
No examples provided.
tascan_update_zone ~349
Update a geofenced zone — move the center, resize the radius, change the routing target, toggle zone-lock, or deactivate it (is_active=false).
| Name | Type | Req | Description |
|---|---|---|---|
| alert_on_breach | boolean | – | – |
| 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… |
| enforce_on_list | boolean | – | – |
| enter_message | string | – | – |
| is_active | boolean | – | – |
| kind | string | – | – |
| lat | number | – | – |
| lng | number | – | – |
| name | string | – | – |
| notify_email | string | – | – |
| notify_on_enter | boolean | – | – |
| notify_on_exit | boolean | – | – |
| polygon | array | – | Replace geometry with a polygon ([[lat,lng],...], ≥3 vertices); pass null to revert to a circle |
| ppe_photo_required | boolean | – | – |
| radius_m | number | – | – |
| required_ppe | array | – | – |
| sms_worker_on_enter | boolean | – | – |
| sms_worker_on_exit | boolean | – | – |
| task_list_id | string | – | – |
| task_list_on_enter | string | – | – |
| zone_id | string | yes | Zone ID |
No output schema declared.
No examples provided.
tascan_verify_receipt ~207
Independently verify a TaScan Action Receipt JWS (protocol 6.8, POST /receipts/verify): size, envelope, signature, issuer origin, key lifecycle, hashing profile, value semantics, schema and chain check, with an online issued/serial check for the reference issuer. Public route: no TaScan scope is required by the API itself, though this MCP connection still needs some valid key to place any tools/call. Works for both the full and the public export profile. Keys come only from the issuer's own well-known key document (https://app.tascan.io/.well-known/tascan-receipt-keys.json for the reference issuer, or the equivalent well-known path for a foreign one) — this tool never supplies keys itself. Never verifies locally — always calls the reference verifier.
| Name | Type | Req | Description |
|---|---|---|---|
| jws | string | yes | The compact JWS to verify (from tascan_get_receipt's output, or any TaScan-format receipt). |
No output schema declared.
No examples provided.
tascan_void_completion ~120
Void a completion that is wrong (POST /completions/:id/void): records a superseding refuted verdict (method void, with your reason) and a receipted completion_voided ledger event, and the task reads open again. The completion itself is never edited or deleted, so its receipt and hash chains stay valid. completion_id comes from tascan_get_task completions[].id. Full tier.
| Name | Type | Req | Description |
|---|---|---|---|
| completion_id | string | yes | – |
| reason | string | yes | Why it is wrong (1-500 characters, required) |
No output schema declared.
No examples provided.
tascan_zone_compliance ~129
Hazard-zone compliance audit (OSHA / insurance): every zone crossing, PPE checkpoint verdict (complied / failed with what was missing / skipped), and breach, plus injury reports cross-referenced with the worker's last PPE checkpoint before the injury. Scope by project or zone, optionally by worker and date range. Same rows the printable Evidence Pack shows.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | – | – |
| since | string | – | ISO date/time lower bound |
| until | string | – | ISO date/time upper bound |
| worker_id | string | – | – |
| zone_id | string | – | – |
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 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.