MCPInstall

education-cloud-multi-campus-configure

Use this skill when a Salesforce Administrator needs to create OR maintain an institutional hierarchy for Education Cloud by parsing organizational structure from a PDF, URL, text, or CSV. On a first run it creates System, Campus, College, and Department Account records linked via ParentId plus 1:1 Business Profile records. On later runs it reconciles the org's existing hierarchy against the desired structure and applies only the delta — adding new units, renaming, or moving a node under a different parent — never recreating what exists. TRIGGER when the user wants to set up, configure, build, update, restructure, or reorganize a multi-campus structure, institutional hierarchy, or account hierarchy with business profiles; or add, rename, or move a campus, college, or department. DO NOT TRIGGER for single-campus flat setups without hierarchy levels, one-off manual account creation, or non-Education-Cloud account management.

Installs
641
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/forcedotcom/sf-skills --skill education-cloud-multi-campus-configure
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads education-cloud-multi-campus-configure automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

Education Cloud Multi-Campus Institutional Hierarchy Configuration

Guides Salesforce Administrators through the full lifecycle of an institutional hierarchy: initial creation AND ongoing maintenance. Parses organizational structure from documents, URLs, CSV, or text, then either builds the hierarchy from scratch or reconciles it against what already exists in the org — creating only the delta. Supports any number of hierarchy levels (e.g., System → Campus → College → Department, or System → Region → Campus → Division → Department) based on the input. Creates/updates Account records with parent-child relationships and Business Profiles for each level, derives materialized paths on the fly for semantic navigation, and validates the result.

Mechanism

Try headless-360 first for every Account/BusinessProfile read or write — reads via dispatch_readonly, writes via dispatch (see references/mcp-invocation.md for call shape, response envelope, and per-step invocations). Probe with GET /services/data/vXX.0/limits before the first call: 2xx → route everything through it. Absent/4xx/5xx → probe other available transports (another Salesforce MCP server, or authenticated sf CLI) with the same read, use the first healthy one, and tell the user which transport is in use. None healthy → stop, ask the user to connect one; never fabricate a result.

Scope

  • In scope: Parsing institutional structure from PDF/URL/text/CSV with any number of hierarchy levels (2+); new setup (create full hierarchy); update/reconcile (compare desired structure to the org's current hierarchy and apply only the delta — add new nodes, rename a node, move a node under a different parent); creating Account hierarchy with parent-child relationships via ParentId; generating Business Profiles for all levels; deriving materialized paths on demand from the parent chain; validating parent-child relationships; handling API errors during bulk create/update
  • Out of scope: Deleting Account or Business Profile records (destructive — report extras, do not delete unless the user explicitly confirms per Step 7); single-level flat structures (no parent-child relationships); non-Education-Cloud account management; migrating field data between hierarchy nodes

Required Inputs

Gather or infer before proceeding:

  • Organizational structure source (the desired structure): PDF document path, website URL, CSV, or plain text description
  • System name: Top-level institutional system name (e.g., "Riverside Community College System")
  • Hierarchy levels: All organizational levels present (Campus, College, Department, Division, Region, etc.) — infer from parsing, do not assume a fixed 4-level structure
  • Mode hint (optional): Whether this is a first-time build or an update to an existing hierarchy. If not stated, detect in Step 4.
  • Existing root (update mode only): The System (root) Account Id, so the current hierarchy can be traversed. A prior run of this skill prints this Id in its summary (Step 10).

Defaults unless specified:

  • Record type for all accounts: resolve from org (do not hardcode) — see Step 3.5
  • Business Profile creation: Enabled for every hierarchy level that lacks one
  • Materialized path: Not a stored field — derived on the fly by walking the Account's ParentId chain to the System root when displaying a path
  • Naming convention: Title Case with spaces preserved
  • Deletion: Never automatic — extra nodes in the org are reported, not removed

If the user provides a complete hierarchy description or document, parse and confirm the structure before creating or changing records.


Workflow

All steps are sequential. Do not skip or reorder. If blocked, stop and ask for missing context.

  1. Verify foundation prerequisites — Follow references/foundation_prerequisites.md: org edition, Lightning Experience, Education Cloud license, running user's Full Access assignment, Education Cloud Foundation enabled (self-heal via confirm-then-enable if off). Do not proceed to Step 1 until all checks pass.

  2. Understand input format

    • Ask user for organizational structure source: PDF path, URL, CSV, or text description
    • If PDF: use Read tool to extract text content
    • If CSV: read columns Name,LevelType,Level,ParentName (see examples/sample_hierarchy_input.csv for the expected shape; examples/sample_hierarchy_input_edgecases.csv shows duplicate names, abbreviations, and an orphaned parent reference)
    • If URL: recommend to user that a trusted structured dataset (JSON/CSV) is the preferred input — web crawl results can be incomplete, inaccurate, or out of date, and some institutional sites block crawling. If the URL is not blocked it will still work. Then fetch and parse HTML to extract hierarchy information
    • If the URL fetch is blocked or fails: do NOT silently substitute a different source (e.g. a search/research agent pulling from Wikipedia or another third-party site). Stop and ask the user for an alternative — a PDF, CSV, or pasted text from the institution's own site. The customer must never be left unaware of what their hierarchy was actually built from
    • If text: parse directly from user's message
  3. Parse desired hierarchy structure

    • Extract System name (top level)
    • Identify all hierarchy levels present (e.g., Campus, College, Department, Division, Region, etc.)
    • Build parent-child relationships for each node based on nesting/indentation in source
    • Store the desired structure as a tree: each node has Name, Level, and ParentNode reference
    • For ambiguous structures, read references/hierarchy_parsing_rules.md for decision logic
    • Do not assume fixed level names — use whatever level names appear in the source (Campus/Location/Site are equivalent, College/School/Faculty are equivalent, Department/Division/Program are equivalent)
  4. Confirm desired structure with user

    • Display extracted hierarchy in nested bullet format — see examples/hierarchy_visualization.md for the box-drawing template and formatting rules.
    • Ask: "Is this structure correct?" (Yes/Make changes/No)
    • If "Make changes": gather corrections and re-display
    • If "No": stop workflow

3.5. Resolve Account RecordType from org

  • Do NOT hardcode a RecordType Id or DeveloperName. Resolve the org's actual Account RecordType at runtime via describe (RecordType metadata like developerName/available isn't exposed through a plain Account SOQL query — describe is the correct source):
    • GET /services/data/v68.0/sobjects/Account/describe via dispatch_readonly (see references/mcp-invocation.md)
    • Read the recordTypeInfos array from body. Each entry has developerName, name, recordTypeId, available, defaultRecordTypeMapping.
  • Select the institutional/business RecordType by developerName (varies by org, e.g. Business, Business_Accounts). Ignore the Master entry (developerName = "Master") — not selectable for records.
  • Selection logic:
    • If exactly one non-Master available:true RecordType → use it.
    • If multiple candidates → ask user which developerName to use.
    • If NO non-Master RecordType exists → missing prerequisite, not a dead end (common when this skill runs standalone, without a prior EDU setup skill). Follow references/account_recordtype_prerequisite.md: ask for/confirm a Label, confirm before creating, create via Tooling API, cold-verify available:true.
  • Capture that entry's recordTypeId into a runtime variable recordTypeId (a resolved value from THIS org's describe response — never a literal copied into the skill). Use recordTypeId for every Account create in Step 6.
  1. Determine mode: new setup vs. update

    • Decide whether the org already has this hierarchy:
      • If the user states it is a first-time build, or no System (root) Account exists → Case 1 (New setup).
      • If the user states it is an update/reorg, or supplies an existing System (root) Account Id → Case 2 (Update/reconcile).
      • If unclear, ask: "Is this a brand-new hierarchy, or an update to one already in the org? If it exists, give me the System (root) Account Id (printed by the previous run's summary)."
    • Case 1 → skip to Step 6 with an empty existingTree (every desired node is new).
    • Case 2 → proceed to Step 5.
  2. (Update mode) Load current hierarchy and compute the delta

    • Traverse the current tree from the System Account Id (children level-by-level via ChildAccounts, SOQL fallback), match desired vs. current by Name within sibling group, and classify each node as reuse / CREATE / EXTRA / RENAME / MOVE — full matching and cycle-rejection algorithm in references/delta_computation.md.
    • Result: a delta list of CREATE / RENAME / MOVE actions plus an EXTRA report (extras are reported, never deleted). If the delta is empty and no renames/moves were requested, tell the user the org already matches the desired structure and skip to Step 9 (verify).
  3. Preview before any write

    • Show a summary BEFORE writing any records — new setup shows counts per level + RecordType; update/reconcile shows the delta explicitly (create/rename/move/unchanged/extra). See examples/output_examples.md for both templates.
    • If any EXTRA nodes exist and the user wants them removed, that deletion is destructive — confirm each explicitly in Step 7; default is to leave them.
    • Ask: "Proceed with these changes?" (Yes/No). If "No": stop workflow.
  4. Apply changes (create / rename / move)

    • Once the user confirmed in Step 6, apply the delta via the transport resolved in Mechanism — call shapes for create/rename/move/delete are in references/mcp-invocation.md (Step 7). Capture each created Account's returned Id. Do not stop at a "pending"/"intended delta" plan — the confirmation is the go-ahead.
    • Order matters: process CREATE actions in depth-first order (create parent before children); apply MOVE and RENAME after creates so parent Ids resolve.
    • Create: body uses RecordTypeId (the field the Data API sObject POST accepts) — NOT a nested RecordType/DeveloperName object, which the sObject create endpoint rejects. Value is the recordTypeId variable resolved from describe in Step 3.5 — never a hardcoded 18-char Id. For the System (top level, new setup only), OMIT ParentId entirely (do not send null). Store returned Account ID: accountMap[NodeId] = response.body.id
    • Rename: patch Name only. Move: patch ParentId only (cycle already rejected in Step 5).
    • Deletion (only if the user explicitly confirmed an EXTRA node for removal in Step 6): confirm the specific node once more, then delete. Skip by default.
    • Print progress after each level/action: [action] applied: [count] Accounts ([level name])
    • Handle API errors per references/error_handling.md
    • Repeat for all levels — do not hardcode level count or names
  5. Create Business Profiles (new/changed Accounts only)

    • For each Account created in Step 7 that does not already have a Business Profile:
      • POST /services/data/v68.0/sobjects/BusinessProfile with body {AccountId} (see references/mcp-invocation.md)
      • (Name field auto-populated from Account — do not set)
    • Do NOT create duplicate Business Profiles for Accounts that already had one (reused nodes in update mode) — BusinessProfile is 1:1 with Account.
    • InstitutionType warning: if the user asks to populate InstitutionType on a Business Profile, note that it is a managed, restricted picklist (typically Public / Private / Charter only — cannot be extended). For institutions outside that K-12/higher-ed taxonomy (e.g. vocational/trade, allied health, satellite/extension campuses), there is no valid value that fits. Tell the user this upfront rather than guessing or silently picking the closest match, and offer Description as the only available workaround field for that nuance — it is not a substitute for a real categorization field.
    • Print: [Total N] Business Profiles created and linked
    • Handle API rate limits per references/error_handling.md (retry with exponential backoff)
  6. Verify hierarchy (cold verification)

    • success:true on a write is not proof. Cold GET /services/data/v68.0/sobjects/Account/[Account Id] (via dispatch_readonly) on each affected Account (created, renamed, moved, and their parents); read Name, ParentId, RecordTypeId. Confirm: ParentId resolves the expected parent (System has ParentId: null, no orphans); RecordTypeId matches Step 3.5's resolved value; RENAME/MOVE persisted correctly.
    • Spot-check at minimum: the deepest leaf (full chain to System) + one node per top-level branch + every renamed/moved node.
    • Print: Hierarchy verification complete — [N] Accounts, parent chains valid, 0 orphans
  7. Return structure summary (completion report)

    • This report describes what was actually created/changed (past tense), not a plan. Lead with a success headline — e.g. # Institutional Hierarchy Expanded Successfully for an update run, # Institutional Hierarchy Created Successfully for new setup. If an output location was provided, you MUST actually write the report there as report.md by invoking the file-write tool — do not merely print the report body in chat and claim it was saved; a described-but-unwritten file does not exist. Otherwise display it.
    • Display hierarchy visualization (nested bullet format from Step 3, see examples/hierarchy_visualization.md)
    • Show total counts per level: System (1), Level 1 name (N), Level 2 name (N), etc.
    • For update mode, break down what changed: created, renamed, moved, unchanged, and any untouched extras.
    • Print the System (root) Account Id so a future update run can reference it.
    • Offer spot-check: "Would you like me to show the complete path for a specific node or verify any account?"
    • If user requests spot-check, GET the specific Account, then GET each ancestor up the ParentId chain to the System root and join their Names with / to display the materialized path (derived on the fly — no stored path field)

Rules / Constraints

ConstraintRationale
Update mode changes only the delta — reuse existing Accounts, never recreateRecreating produces duplicates and orphaned Business Profiles; reconcile is the correct maintenance model
Deletion is never automatic — report extras, delete only on explicit per-node user confirmationRemoving an Account cascades to its Business Profile and children; destructive and irreversible
System Account has no ParentIdTop-level account cannot reference a parent
Child ParentId must reference its immediate parent AccountMaintains tree structure integrity — children link to direct parent, not ancestors
Process CREATE in depth-first order; apply MOVE/RENAME after createsParentId references fail if parent doesn't exist yet
Reject a MOVE that places a node under its own descendantCycle would corrupt the tree; Salesforce also throws CIRCULAR_DEPENDENCY
BusinessProfile must link to exactly one Account via AccountId (1:1)Required by Education Cloud; never create a second profile for an existing Account
All Account names must be unique within their sibling groupDelta matching keys on name-within-parent; duplicates make reconcile ambiguous
Account RecordType resolved at runtime from Account describe, never hardcoded — capture recordTypeId from recordTypeInfos; POST uses RecordTypeId (not nested RecordType/DeveloperName)Hardcoded Id/DeveloperName silently mismatches other orgs; describe is the source of truth for RecordType metadata
Retry Business Profile creation on API rate limitBulk creation commonly hits rate limits; retry succeeds
Materialized path is derived on the fly (walk ParentId chain to root), not read from a stored fieldNo path column exists on Account; compute it by joining ancestor Names with / when a path is requested
Support any number of levels (2+)Do not hardcode level count — parse whatever structure appears in source
headless-360 is the default transport for every Account/BusinessProfile read/write; fall back to another available MCP or authenticated sf CLI only when it isn't set up, and announce the transport in useKeeps org auth on the session's bound OAuth JWT when available; falling back silently would hide which credential/transport actually made the change
Never silently substitute a different data source when the requested URL is blockedCustomer must know what their hierarchy was actually built from — ask for a PDF/CSV/pasted alternative instead
InstitutionType on BusinessProfile is a managed restricted picklist — flag it, don't guess a value for institutions outside its taxonomyGuessing a value (or forcing the closest fit) misrepresents the institution's real category

Gotchas

See references/gotchas.md for known failure modes and their resolutions (rename/delete ambiguity, duplicate update runs, paging, rate limits, ambiguous parsing, missing Education Cloud provisioning, and more).


Output Expectations

Deliverables (new setup):

  • Account records: 1 System + N Campuses + N Colleges + N Departments (all with the org's resolved Account RecordType)
  • BusinessProfile records: 1 per Account, linked via AccountId field
  • Hierarchy visualization: Nested bullet format showing complete structure
  • Verification summary: Confirmation that all parent-child relationships are valid (materialized paths are derived on demand from the ParentId chain, not persisted)
  • System (root) Account Id: Printed for reuse in future update runs

Deliverables (update/reconcile): the delta only — counts of created / renamed / moved / unchanged Accounts, any untouched extras, Business Profiles added for new Accounts, and the same verification summary.

See examples/output_examples.md for sample output structures (new setup and update/reconcile).


Reference File Index

FileWhen to read
references/foundation_prerequisites.mdStep 0 — org edition, Lightning Experience, EDU license, permission set assignment, Education Cloud Foundation enablement; run before Step 1 on every standalone invocation
references/mcp-invocation.mdSteps 3.5, 5, 7-9 — exact dispatch/dispatch_readonly call shape and response envelope for every Account/BusinessProfile read/write
references/account_recordtype_prerequisite.mdStep 3.5 — no non-Master Account RecordType exists in org; ask/confirm/create it as a self-resolving prerequisite
references/hierarchy_parsing_rules.mdStep 2 — when parsed structure is ambiguous (e.g., college names appear without explicit campus parent)
references/delta_computation.mdStep 5 — exact matching algorithm for reconciling desired vs. current hierarchy (reuse/CREATE/EXTRA/RENAME/MOVE), including cycle rejection
references/error_handling.mdSteps 7-8 — when API errors occur during Account create/patch or Business Profile creation
references/gotchas.mdAny step — known failure modes and their resolutions
examples/hierarchy_visualization.mdSteps 3 & 10 — to format the hierarchy structure summary for the user
examples/output_examples.mdSteps 6 & 10 — pre-write preview templates, and sample completion-report output for new setup and update/reconcile
examples/sample_hierarchy_input.csvStep 1 — reference shape for CSV input (Name,LevelType,Level,ParentName)
examples/sample_hierarchy_input_edgecases.csvStep 1 — CSV edge cases: duplicate sibling names, abbreviations, orphaned parent reference

FAQ

What does the education-cloud-multi-campus-configure skill do?

Use this skill when a Salesforce Administrator needs to create OR maintain an institutional hierarchy for Education Cloud by parsing organizational structure from a PDF, URL, text, or CSV. On a first run it creates System, Campus, College, and Department Account records linked via ParentId plus 1:1 Business Profile records. On later runs it reconciles the org's existing hierarchy against the desired structure and applies only the delta — adding new units, renaming, or moving a node under a different parent — never recreating what exists. TRIGGER when the user wants to set up, configure, build, update, restructure, or reorganize a multi-campus structure, institutional hierarchy, or account hierarchy with business profiles; or add, rename, or move a campus, college, or department. DO NOT TRIGGER for single-campus flat setups without hierarchy levels, one-off manual account creation, or non-Education-Cloud account management.

How do I install education-cloud-multi-campus-configure?

Run npx skills add https://github.com/forcedotcom/sf-skills --skill education-cloud-multi-campus-configure in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/education-cloud-multi-campus-configure/ (personal) or .claude/skills/education-cloud-multi-campus-configure/ (project).

Which AI agents can use education-cloud-multi-campus-configure?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is education-cloud-multi-campus-configure safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains education-cloud-multi-campus-configure?

It is published by forcedotcom in forcedotcom/sf-skills. It has 641 recorded installs.

More from forcedotcom/sf-skills

View all →

platform-apex-generate

forcedotcom/sf-skills

Primary Apex authoring skill for class generation, refactoring, and review. ALWAYS ACTIVATE when the user mentions Apex, .cls, triggers, or asks to create/refactor a class (service, selector, domain, batch, queueable, schedulable, invocable, DTO, utility, interface, abstract, exception, REST resource). Use this skill for requests involving SObject CRUD, mapping collections, fetching related records, scheduled jobs, batch jobs, trigger design, @AuraEnabled controllers, @RestResource endpoints, custom REST APIs, or code review of existing Apex.

platform-apex-test-generate

forcedotcom/sf-skills

Use to generate and validate Apex test classes with TestDataFactory patterns, bulk testing (251+ records), mocking, assertions, and disciplined test-fix loops. Use when creating Apex test classes (for triggers, services, controllers, batch jobs, queueables, and callouts), improving coverage, debugging or fixing failing Apex tests, or running test/coverage analysis. Triggers on Test.cls files, sf apex run test, coverage reports. Do NOT trigger for production Apex (use platform-apex-generate) or Jest/LWC tests.

Testing & QA7.1K installs

platform-apex-test-run

forcedotcom/sf-skills

Apex test execution, coverage analysis, and test-fix loops with 120-point scoring. Use when the user runs Apex tests, checks code coverage, fixes failing tests, or touches Test.cls / Test.cls files. DO NOT TRIGGER when writing Apex production code (use platform-apex-generate), Agentforce agent testing (use agentforce-test), or Jest/LWC tests (use experience-lwc-generate).

Testing & QA7K installs

platform-apex-logs-debug

forcedotcom/sf-skills

Salesforce debug log analysis and troubleshooting with 100-point scoring. TRIGGER when: user analyzes debug logs, hits governor limits, reads stack traces, or touches .log files from Salesforce orgs. DO NOT TRIGGER when: running Apex tests (use platform-apex-test-run), generating or fixing Apex code (use platform-apex-generate), or Agentforce session tracing (use agentforce-observe).

platform-soql-query

forcedotcom/sf-skills

Use when the user needs SOQL/SOSL authoring or optimization: natural-language-to-query generation, relationship queries, aggregates, query-plan/selectivity analysis, and performance or safety improvements. TRIGGER when the user writes, optimizes, or debugs SOQL/SOSL, touches .soql files, or asks about relationship queries, aggregates, or query performance. DO NOT TRIGGER for bulk data operations (use platform-data-manage), Apex DML logic (use platform-apex-generate), or report/dashboard queries.

platform-metadata-deploy

forcedotcom/sf-skills

Salesforce DevOps automation using sf CLI v2. TRIGGER when: user deploys metadata, validates a deploy or does a dry-run, deploys to a Production org, quick-deploys a validated job ID, ships/promotes to prod, creates/manages scratch orgs or sandboxes, sets up CI/CD pipelines, or troubleshoots deployment errors with sf project deploy. DO NOT TRIGGER when: writing Apex code, building LWC components (use experience-lwc-generate), creating metadata definitions (use platform-custom-object-generate), deleting metadata from an org (use platform-destructive-deploy), or querying org data (use platform-data-manage).

DevOps & Cloud6.8K installs

Popular education & science skills

View category →

teach

mattpocock/skills

Teach the user a new skill or concept, within this workspace.

Education & Science874K installs

scaffold-exercises

mattpocock/skills

Create exercise directory structures with sections, problems, solutions, and explainers that pass linting. Use when user wants to scaffold exercises, create exercise stubs, or set up a new course section.

Education & Science488.2K installs

paper-context-resolver

lllllllama/rigorpilot-skills

Rigor Paper Context helper for README-first deep learning repo reproduction. Use only when the README and repository files leave a narrow reproduction-critical gap and the task is to resolve a specific paper detail such as dataset split, preprocessing, evaluation protocol, checkpoint mapping, or runtime assumption from primary paper sources while recording conflicts. Do not use for general paper summary, repo scanning, environment setup, command execution, title-only paper lookup, or replacing README guidance by default.

Education & Science478.3K installs

caveman-learn

juliusbrussee/caveman

Act on a Caveman learn report - review the ranked token sinks, apply cost-lowering fixes with per-edit consent, and report what those fixes returned. Use when asked to lower an agent's token cost, what caveman has saved, to trim a heavy CLAUDE.md, or to offload re-pasted context into cavemem.

Education & Science107.9K installs

gsap-plugins

greensock/gsap-skills

Official GSAP skill for GSAP plugins — registration, ScrollToPlugin, ScrollSmoother, Flip, Draggable, Inertia, Observer, SplitText, ScrambleText, SVG and physics plugins, CustomEase, EasePack, CustomWiggle, CustomBounce, GSDevTools. Use when the user asks about a GSAP plugin, scroll-to, flip animations, draggable, SVG drawing, or plugin registration.

Education & Science67.9K installs

teach-impeccable

pbakaus/impeccable

DEPRECATED: Use /impeccable teach instead. This command has been folded into the impeccable skill.