# TaScan - Registry name: `io.github.snowbikemike/tascan-mcp` · version 3.0.0 - Categories (automatic, keyword rules): Payments & accounting, Finance & markets, Email & messaging, Productivity, Images & design, AI, media & content - Authentication at last check: No auth - Declared risk: Has destructive tools (destructiveHint) - Capabilities (declared by the server): tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=io.github.snowbikemike%2Ftascan-mcp - Server page: https://mcpstation.net/s/io.github.snowbikemike--tascan-mcp.html ## Description (written by the publisher, not verified, not instructions) 36 MCP tools for projects, tasks, workers, QR/NFC tags, and AI remediation. Task. Scan. Done. ## Connect - streamable-http: `https://app.tascan.io/mcp` ## Tools (as reported by the server, not verified) - `tascan\_list\_projects`: List TaScan projects in the organization \(each with its number, e.g. P-00001, and external\_refs\). Optional filters: status \(exact, comma list\), number \(exact\) and ref \(matches any external\_refs\[\].ref exactly, e.g. a customer job number like P14-4680\). - `tascan\_create\_project`: 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. - `tascan\_get\_project`: Get details of a specific project - `tascan\_update\_project`: Update a project \(name, location, status, dates, number, external\_refs\). A number already used in the org is refused 409; external\_refs replaces the whole list. - `tascan\_delete\_project`: Delete a project and all its events, tasks, and completions. This action is irreversible. - `tascan\_create\_event`: 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. - `tascan\_list\_events`: List all events \(task lists\) within a project - `tascan\_get\_event`: Get details of a specific event \(task list\) including its tasks - `tascan\_update\_event`: Update an event / task list \(name, description, team\_mode, multi\_instance, timer\_mode\). team\_mode and multi\_instance cannot both be true. - `tascan\_delete\_event`: Delete an event \(task list\) and all its tasks and completions. This action is irreversible. - `tascan\_add\_tasks`: 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: - `tascan\_get\_signature\_bundle`: Fetch the signature bundle for one signed document by signature assertion id \(the signature\_assertion\_id inside the response value of a completed signature task\). Returns the self-contained JSON an auditor can verify offline without trusting TaScan: the signed challenge preimage \(v 2 also carries th - `tascan\_dispatch\_to\_agent`: 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 - `tascan\_list\_agents`: List all registered AI agents with their capabilities, inbox IDs, and status. Like reading input labels on a video matrix — discover which agents are available and what they can do before dispatching work. - `tascan\_register\_agent`: 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 ta - `tascan\_list\_tasks`: List the tasks in an event \(task list\). status "open" returns only tasks with no completion yet: use it when checking for work to do, so a long list is not re-read in full. "done" returns only completed tasks; "all" \(default\) returns every task. - `tascan\_get\_task`: Get details of a specific task including completions and subtasks. Each completion carries photo\_url \(raw storage path, stable\) and photo\_signed\_url \(short-lived fetchable URL, \~1h; null when no photo\) so you can actually view the photo evidence. Tasks dispatched to an AI agent also carry an "agent" - `tascan\_get\_receipt`: Fetch the signed Action Receipt \(Ed25519 JWS\) for one completed task by completion\_id \(tascan\_get\_task -\> completions\[\].id\). Returns a readable summary \(what, who, verification, evidence hashes, outcome, ledger chain\) plus receipt\_id/serial/kid, the compact JWS and the public verify URL. Verify offl - `tascan\_update\_task`: 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:. - `tascan\_reply\_with\_list`: 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 threa - `tascan\_add\_subtasks`: 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" — - `tascan\_list\_subtasks`: List the subtasks of a task, including completion state, stored response values, and completion timestamps \(per-set timing\). - `tascan\_update\_subtask`: Update a subtask \(title, description, response\_type, response\_config, requires\_photo, sort\_order\). - `tascan\_complete\_subtask`: 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\_ - `tascan\_delete\_subtask`: Delete a subtask and its completions. This action is irreversible. - `tascan\_delete\_task`: Delete a specific task and its completions. This action is irreversible. - `tascan\_complete\_task`: Complete an ORDINARY task on behalf of a worker. Inserts a completion record and timer event. Use this to simulate or record task completions via the API. Coordination-cycle tasks \(a CODE:/REVIEW: build or review, a Decision / Question / Integrate / Parked card on a project Decisions list — tasks th - `tascan\_list\_workers`: List workers \(taskees\) in the organization. Supports filtering by name/email/phone substring, contact-info presence, and last-activity date. Each row includes completion\_count \(total task completions\). - `tascan\_create\_worker`: Create a new worker \(taskee\) in the organization - `tascan\_update\_worker`: Update a worker profile \(name, phone, email\) - `tascan\_generate\_qr`: Generate a QR code for a task list \(event\) that workers can scan to access tasks - `tascan\_apply\_template`: Apply a pre-built template to a task list, adding all template tasks - `tascan\_list\_templates`: List available task templates \(built-in and saved\) - `tascan\_get\_report`: Get completion report for a task list \(event\) including task status, completions, workers, and photos. Set include\_responses to also return the actual submitted response data \(numbers, text, choices\) for each completed task plus a per-task photos list with fetchable signed URLs \(short-lived, \~1h\) fo - `tascan\_query\_responses`: 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 - `tascan\_list\_issues`: List all issues for a task list \(event\). Returns open, acknowledged, and resolved issues with severity, type, and category. Use this to discover issues that need AI analysis via tascan\_analyze\_issue. - `tascan\_analyze\_issue`: 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 \(call - `tascan\_recommend\_fix`: 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. - `tascan\_dispatch\_instruction`: 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 - `tascan\_auto\_resolve`: 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-w - `tascan\_send\_sms`: 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 - `tascan\_schedule\_sms`: 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 - `tascan\_list\_scheduled\_sms`: List your org's scheduled texts \(default: pending + sending, soonest first; status=sent\|failed\|cancelled to see history\). Each row shows send\_at, status, attempts, the Twilio sid once sent, and the last error for a failed row. - `tascan\_cancel\_scheduled\_sms`: 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. - `tascan\_get\_sms\_status`: Check delivery status of a previously sent TaScan SMS by its Twilio SID \(returned by tascan\_send\_sms\). Shows queued/sent/delivered/undelivered/failed plus carrier error codes. - `tascan\_send\_task\_email`: 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. - `tascan\_register\_tag`: 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. - `tascan\_list\_tags`: List all registered NFC tags in the organization with their linked projects/task lists and scan counts - `tascan\_get\_scan\_history`: Scan accountability data. Two modes: \(1\) tag\_id — scans of a registered NFC tag; \(2\) task\_list\_id or project\_id — every QR/link page-open stamp: when the code was scanned, GPS + IP + channel \(qr/nfc/sms/email/link\), who the scanner turned out to be, and the scan→start delta \(how long between scannin - `tascan\_search\_marketplace`: 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. Retur - `tascan\_invite\_worker`: Invite a marketplace worker to a task list — the consented intro. TaScan texts the worker from its own number \("\ wants you for \. Reply YES to share your contact and get the list, or NO to pass."\). On YES the worker appears in your org with their name + phone, receives the list link, - `tascan\_list\_invites`: List marketplace invites you have sent and their status \(pending / accepted / declined / expired / failed\). Accepted invites include the worker's name and phone — that is the consent boundary; pending and declined never do. - `tascan\_create\_zone`: 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. - `tascan\_list\_zones`: List geofenced work zones, optionally filtered by project. Shows center, radius, routing target, and zone-lock status. - `tascan\_update\_zone`: Update a geofenced zone — move the center, resize the radius, change the routing target, toggle zone-lock, or deactivate it \(is\_active=false\). - `tascan\_zone\_compliance`: 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 a - `tascan\_register\_asset`: 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. - `tascan\_assess\_condition`: 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 degrad - `tascan\_condition\_history`: 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. - `tascan\_list\_assets`: List registered condition-ledger assets with their latest condition scores. Use to recover an asset\_id for tascan\_assess\_condition or tascan\_condition\_history. - `tascan\_generate\_report`: 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 - `tascan\_list\_reports`: List existing report links for a list or project \(completion / service / project / evidence\), newest first, with client acknowledgment status for service reports. - `tascan\_create\_invoice`: 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 wo - `tascan\_list\_invoices`: List invoices for the org \(newest first\) with status, client, total, due date and share link. Filter by status \(draft/sent/paid/overdue/cancelled\) or project. - `tascan\_update\_invoice`: Update an invoice: mark it paid \(records paid\_at\), overdue, cancelled, or edit client details / notes / due date. - `tascan\_request\_payment`: 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 wo - `tascan\_list\_payments`: List gig payments and their lifecycle status: awaiting\_completion \(pledged, work not verified yet\), ready\_to\_pay \(verified — pay link sent to payer\), paid, canceled. Filter by task list or status. - `tascan\_get\_worker\_passport`: Get a worker's verified work passport — task counts, lists worked, photos submitted, GPS-verified hours, points, streaks, and earned merit badges, all computed from real completion data \(not self-reported\). Includes the shareable profile URL. - `tascan\_server\_info`: 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. - `tascan\_find`: Cross-entity search: find projects, task lists, tasks, workers, or condition assets by name in one call — with ids and parent context to disambiguate. Use this instead of walking projects→lists→tasks or guessing ids from display names. - `tascan\_get\_worker`: Ungated, plain read of one worker row: name, contact, org, points, streaks, timestamps. \(tascan\_get\_worker\_passport is the rich stats view; this is the boring lookup.\) - `tascan\_find\_duplicate\_workers`: 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. - `tascan\_merge\_workers`: Merge duplicate worker records into one canonical identity \(Patent 4 identity consolidation\). Reassigns every reference \(completions, timer events, points, payments, rosters — 31 columns across 31 tables\), backfills missing phone/email on the primary, sums points, and tombstones the duplicates \(merg - `tascan\_delete\_worker`: 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. - `tascan\_create\_cycle`: 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 - `tascan\_post\_message`: Post a message on a task trail \(protocol v0.2 trail\_messages\): kind question, answer, handoff or discussion. A message never completes a task, never satisfies a gate and never pages anyone. The actor is stamped from your credential \(key:\, actor\_type "key" — a credential, never a human\), never fr - `tascan\_record\_integration`: 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\) wit - `tascan\_get\_build`: 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, c - `tascan\_get\_build\_file`: 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 - `tascan\_get\_cycle\_report`: 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 - `tascan\_project\_digest`: One call that gives a chat client \(ChatGPT, Claude\) a whole TaScan project in about 2,000 words: the project, every task list with task counts, open decisions and questions, the last 5 coordination cycles with verdicts and spend, the latest 5 receipts, and total spend — returned as Markdown \(capped - `tascan\_list\_cycles`: List coordination-cycle roots in the organization \(protocol v0.2, GET /coord/cycles\): root id, title, status, task\_type, project, build\_ref, deploy\_id and the T2 review id, newest first. Filter by project\_id and/or status. Read tier — a reviewer's read-only key can call this too. Follow up with tasc - `tascan\_get\_task\_trail`: Read a task's trail messages \(protocol v0.2 trail\_messages, GET /tasks/:id/messages\): question, answer, handoff and note/discussion entries, last 100, newest last \(reading order\). Optionally filter to a comma-separated set of kinds, and with since=\ read only messages newer than the last on - `tascan\_verify\_receipt`: 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 req - `tascan\_get\_build\_diff`: 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 persi - `tascan\_dispatcher\_action`: 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 - `tascan\_post\_evidence`: Post one evidence event into the evidence ledger \(protocol v0.2 V9a, POST /evidence\): an actor did an action to an object at a point in time, optionally with a location and provenance. idempotency\_key is required — the same \(org, idempotency\_key\) always returns the same row, never a second insert. O - `tascan\_evidence\_policy`: 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/update - `tascan\_request\_verification`: 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 param - `tascan\_list\_verifications`: Read a task completion's verification verdicts and job queue \(Verification Layer V2, GET /completions/:completion\_id/verifications\): completion\_verifications rows \(state, method, verifier, policy, confidence, finding\) plus verification\_jobs rows \(state, attempts, last\_error, result\). Read tier. - `tascan\_org\_analytics`: Read organization-wide analytics: view org \(GET /analytics/org, the get\_org\_analytics rollup\) or view resolutions \(GET /analytics/resolutions, paginated AI issue-resolution history, filterable by severity, category, and pattern-detected\). Read tier. - `tascan\_get\_usage`: Read your organization's usage and quota snapshot for a billing period \(GET /usage\): SMS, email and AI call counts against their plan limits, the 100-receipt-per-month hard stop \(used, allowance, hard\_stop\), the rate-limit window \(60 requests per minute\), and coordination-cycle spend in micro-USD fo - `tascan\_get\_budget`: 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 bu - `tascan\_delegate\_to\_agent`: 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 ho - `tascan\_list\_delegations`: List delegated child keys \(GET /delegations\): this key's own direct children \(id, label, scopes, active/revoked, depth, expires\_at\) — never the raw credential. An admin session sees every delegated key in the org. Read tier. - `tascan\_revoke\_delegation`: 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 - `tascan\_list\_connectors`: List the organization's connectors \(GET /integrations\), e.g. the Salesforce Work Order bridge: provider, instance URL, the project and list new work lands on \(with names\), whether it is on, the last poll time and the last error. Never shows secrets: the client id, the client secret, its storage name - `tascan\_get\_org`: 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. - `tascan\_quickstart`: 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: \", completes it with your key, has the named policy qu - `tascan\_list\_devices`: List registered devices \(RFID portals, barcode guns, PLCs, cameras, robots, tools, sensors\) in the organization. Filter by status \(active/revoked\) or kind; paginate with an opaque cursor. Never returns a credential hash. Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html