Onboarding Contractors

by wingspanHQ01f2b0806fc9No licenseListed Oct 8, 2026Updated Oct 8, 2026

Add contractors to Wingspan, assign them to an existing engagement and send their invites. Use for "add these contractors", "onboard these people", "invite [name] to Wingspan", "create contractor records", "set up these five contractors", "invite this roster", "add them to the [engagement] engagement". Writes to the company's Wingspan account, so it always previews first.

Instructions only

Onboarding contractors

The shared rules for every call — ids, paging, previewing a write, what the tools cannot do — are in the using-wingspan-tools skill. Apply them here.

A contractor is a person or business the company pays; Wingspan also calls this a payee. An engagement is a named working arrangement a contractor is assigned to. An invite is the email that lets the contractor claim their own Wingspan account.

create_contractors does three things in one call: it creates each contractor record, assigns each one to an existing engagement, and emails the invite to everyone who has not come on board yet. It writes to the company's account.

Always preview first

  1. Call create_contractors with the rows and no mode. It defaults to mode: "preview", which writes nothing: it looks up the engagement, checks every email address, and reports exactly what applying would do — including which rows already exist.
  2. Show that preview to the user in full: how many would be created, how many would be skipped, which rows have problems, which engagement each one would be assigned to, and how many invite emails would be sent and to how many people.
  3. Wait for the user to say yes. Do not treat an earlier "add these people" as consent to write; the preview is the thing being consented to.
  4. Call again with mode: "apply", a requestId you have not used before, and the same rows and the same ref values you previewed.

Arguments

ArgumentWhat it does
contractorsThe rows. At least one, at most 50 per call.
engagementAn existing engagement, by name or id, to assign every row to. A row's own engagements overrides it.
sendInvitesEmail the invite to everyone not yet on board. Defaults to true.
modepreview (the default, writes nothing) or apply.
requestIdRequired with apply. An id of your own, up to 64 printable characters with no spaces.
accountIdWrite into one child account of an organization instead of the signed-in account. Only when the user names one; who_am_i lists them.

Each row in contractors:

FieldWhat it does
emailRequired. The invite goes here, and it identifies the contractor.
refYour label for this row, echoed in the result. Up to 48 printable characters, no spaces and no colon. Defaults to row-1, row-2 and so on.
nameFull name. Split into first and last name at the first space, exactly as the Wingspan app does.
companyBusiness name, if they invoice as a company.
externalIdYour own id for this contractor, for reconciliation.
phoneContact phone number.
engagementsEngagements for this row specifically, by name or id. Overrides the top-level engagement.

There are no other fields. Do not invent one — custom fields and group membership are app work.

What requestId and ref are for

Every write carries a key built from your requestId and the row's ref. If an apply half-succeeds and you call again with the same requestId and the same refs, you get back the result of the original writes; nothing new is created. That is the only safe way to retry. Change the requestId only when starting a genuinely new attempt, and never renumber refs between the preview and the apply — refs, not row order, are what the keys are built from.

Results come back by ref. Email addresses and names are deliberately absent from the result, including from error messages, so keep your own mapping from ref to person if the user needs one.

What each row can come back as

  • created — the contractor record was created, and the invite was sent unless sendInvites was false.
  • skipped — the contractor already existed. Nothing was duplicated. If they existed but had never come on board, the invite still went out to them: that is what makes a retry of a half-finished batch safe.
  • failed — that row alone failed, with a reason and often the field at fault. One bad row never stops the others.

A row can also report engagement problems separately from the contractor itself: the record was created but an assignment did not stick.

The invite, and what happens next

The invite creates a pending claim record and emails a one-time link to the address on the row. Wingspan decides which person that address belongs to; a caller never supplies one.

From there:

  • Pending — waiting for the recipient.
  • Linked — they accepted, and the contractor record is now bound to the Wingspan account they chose. This is permanent.
  • Rejected — they declined. Inviting them again creates a fresh, separate claim, and that is done in the Wingspan app.

search_contractors reports this as onboarding, with Pending, Active and Inactive. The finding-contractors skill covers reading it.

Engagements

Assign contractors to an existing engagement. This tool never creates one: if the user names an engagement the company does not have, the preview says so, and creating it is app work.

A contractor created with no engagement is a real record, but it cannot be paid until an engagement is assigned. Say that when a user asks for bare records.

Batches

Fifty rows is the hard limit for one call; over that, the tool refuses and names the limit rather than quietly dropping rows. Batches of roughly 25 are easier for a person to read in a preview. Each batch is its own attempt and needs its own requestId.

This is a synchronous call, not a bulk importer. A roster of several hundred people belongs in the Wingspan app's import screen.

Finish these in the Wingspan app

  • Creating or editing engagements, worksites, groups, custom fields and rate cards.
  • Setting a contractor's custom-field values, adding them to a group, or setting their rate.
  • Re-sending, retargeting or cancelling an invite, and inviting again after a rejection.
  • Attaching requirements, and approving or rejecting what a contractor submits.
  • Everything the contractor does themselves: accepting the invite, signing up, signing documents, uploading certificates, verifying identity, adding a payout method.
  • Sharing tax information, which is usually the contractor's step; a company that records and verifies a contractor's taxpayer details itself also does that in the app.

Source and attribution

Source:wingspanHQ/mcp-claude-plugininskills/onboarding-contractorsat commit01f2b08

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal

More from wingspanHQ/mcp-claude-plugin

Using Wingspan Tools

wingspanHQ

The shared rules every Wingspan tool call follows: ids, paging, previewing a write, and what the tools cannot do. Load this before any Wingspan tool call, and whenever someone asks about the people they pay through Wingspan, what they owe, onboarding paperwork, invites, invoices or payments — for example "who do we pay", "what do we owe this month", "is this contractor ready to be paid", "add these contractors", "log a payment", "why has this not been paid".

Awaiting classificationOct 8, 2026

Troubleshooting Connection

wingspanHQ

Diagnose Wingspan connection and permission problems. Use when a Wingspan tool returns an authentication or permission error, when the tools report nothing at all, when an answer looks like it came from the wrong company or the wrong account, or when someone asks "am I connected to Wingspan", "is my login still valid", "why can't Claude see my contractors", "why is this empty", "these are not my contractors".

Awaiting classificationOct 8, 2026

Outstanding

wingspanHQ

List the contractors who have one named onboarding requirement outstanding, such as a W-9, a certificate of insurance or a background check. Run it with the requirement's name. It reports who has not finished the requirement; it does not confirm whose payments are blocked by it.

Awaiting classificationOct 8, 2026

Finding Contractors

wingspanHQ

Find, filter and inspect the contractors a company pays through Wingspan, including who still has onboarding paperwork outstanding. Use for "who do we pay", "list our contractors", "find [name]", "who has not signed up yet", "who is missing their W-9", "who is blocked by the certificate of insurance", "can we pay [name]", "what is [name]'s status", "who is on this engagement".

Awaiting classificationOct 8, 2026

Creating Draft Payables

wingspanHQ

Create draft payables — new payment obligations to contractors — in Wingspan. Nothing is paid. Use for "log a payment", "pay [name] $500 for [work]", "record these payments", "add these payments to the [engagement] engagement", "create payables", "log 12 hours at $85 for [name]", "bill this month's work". Writes to the company's Wingspan account, so it always previews first.

Awaiting classificationOct 8, 2026

Connect

wingspanHQ

Check the Wingspan connection and report who it is signed in as. Run this after installing the plugin or after re-authorizing, or whenever you want to confirm Claude is reading the right Wingspan account.

Awaiting classificationOct 8, 2026