> ## Documentation Index
> Fetch the complete documentation index at: https://developers.nexspace365.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Tool Catalog

> Every registry tool exposed over MCP, with its purpose, read/write mode, and exact required scope

# Tool catalog

This is the full list of **registry tools** exposed over the NexSpace MCP
surface — 100 tools across nine categories. Use it to work out what a scope
grant actually unlocks *before* you connect, and to review the surface you are
about to hand to an agent.

You need this list because `tools/list` is **not** filtered by your credential's
scopes: it advertises the whole governed catalog regardless of what you were
granted, so it cannot tell you what `scheduling:write` or `crm:write` will
unlock. See
[What `tools/list` actually returns](/concepts/mcp#what-toolslist-actually-returns).

<Note>
  These are the registry tools only. The **19 named workforce verbs**
  (`fillShift`, `runPayroll`, `searchStaff`, …) are a separate layer with their own
  scopes — see [MCP → Named workforce verbs](/concepts/mcp#1-named-workforce-verbs).
  Connected-app actions are a third layer, gated on `apps:read` / `apps:write` and
  listed per caller. Five in-app tools are deliberately withheld from MCP
  entirely; see
  [Not available over MCP](/concepts/mcp#not-available-over-mcp).
</Note>

## How scopes are derived

Every registry tool's required scope is mechanical:

* a **read-only** tool requires `<category>:read`
* any other tool requires `<category>:write`

There is no per-tool scope and no read/write aliasing — the dispatcher matches
the scope string literally (or via a `<resource>:*` wildcard). Getting the
category right is the whole game.

<Warning>
  **Write tools in read-only categories are unreachable.** Only three categories
  are promoted to read+write: **communications**, **crm**, and **scheduling**.
  In the other six, a write tool has **no headless scope at all** — it is not
  listed, and calling it by name returns `-32004 NOT_FOUND` ("Unknown tool: …").

  The clearest example is compliance's `run_batch_exclusion_check`. It exists in
  the in-app assistant, it is a genuine write, and `compliance:read` will never
  unlock it — there is no `compliance:write` scope to grant. Do not plan an
  integration around a writer in analytics, calendar, compliance, facility,
  general, or marketing.
</Warning>

## Category summary

| Category | Exposure | Tools | Scope(s) |
| - | - | - | - |
| [analytics](#analytics) | Read | 19 | `analytics:read` |
| [calendar](#calendar) | Read | 4 | `calendar:read` |
| [communications](#communications) | Read + Write | 7 | `communications:read`, `communications:write` |
| [compliance](#compliance) | Read | 4 | `compliance:read` |
| [crm](#crm) | Read + Write | 20 | `crm:read`, `crm:write` |
| [facility](#facility) | Read | 3 | `facility:read` |
| [general](#general) | Read | 7 | `general:read` |
| [marketing](#marketing) | Read | 12 | `marketing:read` |
| [scheduling](#scheduling) | Read + Write | 24 | `scheduling:read`, `scheduling:write` |

## analytics

19 read-only tools. All require **`analytics:read`**.

| Tool | Purpose | Mode | Scope |
| - | - | - | - |
| `get_crm_activities_summary` | CRM activity counts — calls made, emails sent, meetings booked | Read | `analytics:read` |
| `get_crm_deals_snapshot` | Current open-pipeline value and deal counts by stage | Read | `analytics:read` |
| `get_crm_deals_summary` | Won deals, win rate, deals created, deal velocity | Read | `analytics:read` |
| `get_crm_dinner_attendance_summary` | Dinner-event seats, show rate, and no-show rate | Read | `analytics:read` |
| `get_crm_leads_summary` | New leads and lead conversion rate over a date range | Read | `analytics:read` |
| `get_facility_kpis` | Fill rate, no-show rate, staff retention, cost per shift | Read | `analytics:read` |
| `get_job_postings_stats` | Active postings, applicant counts, hiring-pipeline metrics | Read | `analytics:read` |
| `get_payroll_overtime_summary` | Overtime hours and gross pay, split by facility/department/role | Read | `analytics:read` |
| `get_revenue_billing_summary` | Invoiced, outstanding, and collected revenue | Read | `analytics:read` |
| `get_scheduling_lead_time_summary` | Booking lead time and short-notice shift share | Read | `analytics:read` |
| `get_scheduling_shifts_summary` | Shift volume, fill rate, and open-shift counts | Read | `analytics:read` |
| `get_staffing_variance` | Agency vs in-house utilization and cost variance | Read | `analytics:read` |
| `get_workforce_agency_usage_summary` | Agency hours, cost, and average hourly rate | Read | `analytics:read` |
| `get_workforce_attendance_summary` | Attendance rate with absence/lateness breakdown | Read | `analytics:read` |
| `get_workforce_compliance_summary` | Compliance score, active issues, severity breakdown | Read | `analytics:read` |
| `get_workforce_credentials_summary` | Active, expiring (30/60d), and expired credential counts | Read | `analytics:read` |
| `get_workforce_hiring_summary` | New hires, open requisitions, average tenure | Read | `analytics:read` |
| `get_workforce_pto_summary` | PTO requests, hours taken, pending requests | Read | `analytics:read` |
| `list_report_fields` | Every measure/dimension available to compose into reports | Read | `analytics:read` |

## calendar

4 read-only tools. All require **`calendar:read`**.

| Tool | Purpose | Mode | Scope |
| - | - | - | - |
| `check_availability` | Staff availability for a date and shift type at a facility | Read | `calendar:read` |
| `find_scheduling_conflicts` | Double bookings, understaffed shifts, overtime risk | Read | `calendar:read` |
| `get_schedule_overview` | Shift counts by day and status, one or all facilities | Read | `calendar:read` |
| `get_upcoming_events` | Shifts and scheduling events for the next N days | Read | `calendar:read` |

## communications

Read + write. 1 read tool and 6 write tools.

| Tool | Purpose | Mode | Scope |
| - | - | - | - |
| `get_communication_status` | SMS/email service status and recent delivery metrics | Read | `communications:read` |

Writes (each returns `pending_approval` when governance requires sign-off):

| Tool | Purpose | Risk | Scope |
| - | - | - | - |
| `build_audience` | Preview a campaign audience from CRM filters — count only, no PII | low | `communications:write` |
| `create_campaign` | Create an email/SMS/voice campaign draft | medium | `communications:write` |
| `configure_template` | Set a campaign step's content (subject/body, SMS text, voice script) | medium | `communications:write` |
| `schedule_campaign` | Set a campaign's run time — immediate, scheduled, or recurring | medium | `communications:write` |
| `send_email_notification` | Email a staff member about shifts or schedule changes | medium | `communications:write` |
| `send_sms` | SMS a staff member about urgent shift or schedule changes | medium | `communications:write` |

## compliance

4 read-only tools. All require **`compliance:read`**. The category is read-only,
so its write tools (including `run_batch_exclusion_check`) are unreachable over
MCP.

| Tool | Purpose | Mode | Scope |
| - | - | - | - |
| `check_staff_exclusion` | Check a staff member against OIG LEIE and SAM.gov | Read | `compliance:read` |
| `get_compliance_overview` | Facility credential, exclusion, and training posture | Read | `compliance:read` |
| `get_expiring_credentials` | Staff credentials expiring soon | Read | `compliance:read` |
| `verify_license` | Verify a professional license against the state registry | Read | `compliance:read` |

## crm

Read + write. 13 read tools and 7 write tools.

| Tool | Purpose | Mode | Scope |
| - | - | - | - |
| `get_crm_reports` | Lead conversion, pipeline value, activity metrics | Read | `crm:read` |
| `get_deal_pipeline` | Deals by stage with value and expected close dates | Read | `crm:read` |
| `list_custom_fields` | Custom field definitions for a CRM entity type | Read | `crm:read` |
| `list_form_submissions` | Recent web-form submissions, PII redacted | Read | `crm:read` |
| `list_meeting_bookings` | Bookings for a meeting link or across the org, PII redacted | Read | `crm:read` |
| `list_meeting_links` | Booking links with slug, duration, timezone, windows | Read | `crm:read` |
| `list_pipelines` | Pipelines and their stages, in order | Read | `crm:read` |
| `list_sequences` | Outreach sequences (email/task cadences) | Read | `crm:read` |
| `list_web_forms` | Web forms with status, field count, recent submissions | Read | `crm:read` |
| `list_workspaces` | CRM workspaces/boards and their terminology overrides | Read | `crm:read` |
| `search_contacts` | Search contacts by name, email, company, or role | Read | `crm:read` |
| `search_crm_unified` | One query across leads, contacts, companies, deals | Read | `crm:read` |
| `search_leads` | Search leads by name, status, source, or date range | Read | `crm:read` |

Writes:

| Tool | Purpose | Risk | Scope |
| - | - | - | - |
| `create_crm_note` | Attach a free-form note to a contact, company, or deal | low | `crm:write` |
| `assign_record_owner` | Reassign a lead/contact/company/deal to another facility user | medium | `crm:write` |
| `convert_lead` | Convert a qualified lead into a contact, plus optional company/deal | medium | `crm:write` |
| `create_crm_task` | Create a follow-up task with due date and optional assignee | medium | `crm:write` |
| `create_lead` | Create a lead from an inquiry or referral | medium | `crm:write` |
| `log_crm_activity` | Log a call/email/meeting/note to a record's timeline | medium | `crm:write` |
| `move_deal_stage` | Move a deal to a different stage within its pipeline | medium | `crm:write` |

<Note>
  The legacy `update_deal_stage` is **not** on this surface — use
  `move_deal_stage`. Note also that the named verbs `searchLeads` and
  `qualifyLead` require the literal scope `crm:*`, which `crm:read` does not
  satisfy. See [the `crm:*` trap](/concepts/mcp#how-scopes-are-matched-over-mcp).
</Note>

## facility

3 read-only tools. All require **`facility:read`** — not `facilities:read`,
which is the *verb* scope for `listFacilities` / `getFacility`.

| Tool | Purpose | Mode | Scope |
| - | - | - | - |
| `get_available_staff` | Staff available at a facility, filtered by specialty or role | Read | `facility:read` |
| `get_facility_details` | Facility detail with staffing levels and compliance status | Read | `facility:read` |
| `search_facilities` | Find facilities and their ids by name or type | Read | `facility:read` |

## general

7 read-only tools. All require **`general:read`**.

| Tool | Purpose | Mode | Scope |
| - | - | - | - |
| `search` | Search the knowledge base; returns ids to pass to `fetch` | Read | `general:read` |
| `fetch` | Full text of a knowledge-base document by id from `search` | Read | `general:read` |
| `search_knowledge_base` | Role-filtered knowledge-base search | Read | `general:read` |
| `list_documents` | Knowledge-base documents the caller can access | Read | `general:read` |
| `web_search` | Search the web for current external information | Read | `general:read` |
| `list_connected_apps` | Third-party apps the credential's bound user has connected | Read | `general:read` |
| `get_approval_status` | Lifecycle status and result of an approval you raised | Read | `general:read` |

<Warning>
  `get_approval_status` is how you follow up on a `pending_approval` write, and it
  is gated on `general:read`. A credential minted with only write scopes cannot
  poll its own approvals. **Request `general:read` alongside any write scope.**
</Warning>

## marketing

12 read-only tools. All require **`marketing:read`**.

| Tool | Purpose | Mode | Scope |
| - | - | - | - |
| `ads_get_budget_status` | Ad budget caps, spend to date, headroom, kill-switch state | Read | `marketing:read` |
| `social_get_analytics` | Rolled-up social engagement with per-platform breakdown | Read | `marketing:read` |
| `social_get_best_times` | Weekday × hour windows with the highest average engagement | Read | `marketing:read` |
| `social_get_feed` | Aggregated wall feed with moderation status and engagement | Read | `marketing:read` |
| `social_get_post_performance` | Published posts ranked by total engagement | Read | `marketing:read` |
| `social_list_accounts` | Connected social accounts and sync state — never tokens | Read | `marketing:read` |
| `social_list_scheduled` | Queued, drafted, and published scheduled posts | Read | `marketing:read` |
| `studio_build_tracked_link` | Build a UTM-tagged link for attribution | Read | `marketing:read` |
| `studio_get_brand_kit` | Brand colors, fonts, logo, voice tone, watermark settings | Read | `marketing:read` |
| `studio_get_template` | Prompt body and merge tokens for one Content Studio template | Read | `marketing:read` |
| `studio_list_assets` | Browse the facility's asset library | Read | `marketing:read` |
| `studio_list_templates` | Content Studio templates usable as starting points | Read | `marketing:read` |

## scheduling

Read + write. 7 read tools and 17 write tools — the largest category, and the
one whose `:write` grant covers the most surface.

| Tool | Purpose | Mode | Scope |
| - | - | - | - |
| `get_shifts` | Shifts by date range, status, or facility | Read | `scheduling:read` |
| `find_staff` | Find staff by specialty, role, availability, or facility | Read | `scheduling:read` |
| `get_schedule_settings` | Fully-resolved schedule settings for the caller's scope | Read | `scheduling:read` |
| `describe_schedule_settings` | One-page summary of the current schedule configuration | Read | `scheduling:read` |
| `get_schedule_settings_audit` | Recent settings changes with before/after and reason | Read | `scheduling:read` |
| `list_schedule_templates` | System and tenant-private schedule-config templates | Read | `scheduling:read` |
| `preview_template_diff` | Diff current settings against a template before applying | Read | `scheduling:read` |

Shift writers:

| Tool | Purpose | Risk | Scope |
| - | - | - | - |
| `create_shift` | Create a new shift posting at a facility | medium | `scheduling:write` |
| `update_shift` | Update a shift's times, notes, specialty, or department | medium | `scheduling:write` |
| `approve_shift_request` | Approve a pending staff shift request | medium | `scheduling:write` |
| `cancel_shift` | Cancel a shift — a reason is required | high | `scheduling:write` |

Schedule-settings writers:

| Tool | Purpose | Risk | Scope |
| - | - | - | - |
| `add_blackout_window` | Block scheduling across a date range, with a reason | medium | `scheduling:write` |
| `add_custom_field` | Add a tenant-defined custom field to an event type | medium | `scheduling:write` |
| `add_holiday` | Add a company-specific holiday to the tenant calendar | medium | `scheduling:write` |
| `apply_holiday_preset` | Enable or remove a national holiday preset pack | medium | `scheduling:write` |
| `set_event_type_enabled` | Toggle an event type on or off at the active scope | medium | `scheduling:write` |
| `update_terminology` | Rename built-in event-type and resource-type labels | medium | `scheduling:write` |
| `add_compliance_rule` | Add a credential predicate gate to scheduling | high | `scheduling:write` |
| `add_notification_rule` | Bind a trigger event to an audience and delivery channels | high | `scheduling:write` |
| `add_pay_differential` | Add a wage modifier (multiplier or flat add-on) for a window | high | `scheduling:write` |
| `add_pay_rate_band` | Add a base hourly rate band matched by role/specialty/cert | high | `scheduling:write` |
| `apply_schedule_template` | Apply a schedule template — call `preview_template_diff` first | high | `scheduling:write` |
| `upsert_approval_kind` | Configure an approval kind's approver and escalation chain | high | `scheduling:write` |
| `upsert_overtime_rule` | Insert or update an overtime rule (thresholds, multipliers) | high | `scheduling:write` |

<Warning>
  `high`-risk writes sit at the un-relaxable risk floor: whenever the call is
  authorized at all they return `status: "pending_approval"` and never commit
  inline, on any surface. Build these paths around the approval round-trip. See
  [What decides whether a write pauses](/concepts/mcp#what-decides-whether-a-write-pauses).
</Warning>

## How this list is maintained

The exposed set is **pinned in CI**. A newly registered tool in an exposed
category fails the build until someone classifies it — either adding it to the
pin or adding it to the denylist — so this page cannot drift silently, and the
surface cannot grow by accident.

<Note>
  A live `tools/list` on your own credential is still the runtime source of truth.
  It reflects tools promoted since this page was published and, unlike this page,
  includes your connected-app tools. Use this catalog to plan scopes; use
  `tools/list` to drive a client.
</Note>

## See also

* [MCP](/concepts/mcp) — the named verbs, the four tool layers, and the error
  model.
* [Tenant isolation](/concepts/tenant-isolation) — how `facilityId` is rewritten
  or rejected on every tool here.
* [Governance](/concepts/governance) — why a write may return
  `pending_approval` instead of a result.
* [Model tier gate](/concepts/model-tier-gate) — why a tool you are scoped for
  can still return `-32003`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.