This is the MCP / AI reference for systemHUB — written for AI agents and developers. If you are a person looking for how-to help, use help.systemhub.com instead.

This page is generated from the live systemHUB MCP schemas. A hand-written reference drifts, and a client’s AI flails when the docs say X and the tool does Y. This reference is regenerated from the schema snapshot on every deploy so it cannot lie. Guides and examples are hand-written; this reference is not.

Because it mirrors the schema faithfully, it also reproduces the schema’s known inaccuracies until they’re fixed upstream. Where this page conflicts with the concepts pages, the concepts pages win — currently one known case: the schema describes description as “plain-text”, but the field holds rich text (it’s the Overview, same editor rules as the body — see Authoring content). A schema fix is logged.

⚠️ This page was generated from a stored schema snapshot, not a live fetch. The snapshot was last refreshed 5 days ago, so newer tools or changed parameters may be missing. The live pull now requires a human to approve an OAuth consent screen (a deliberate security change), so it can no longer run unattended. Call tools/list on your own connection if you need the authoritative set, and treat anything here as accurate as of the snapshot rather than as of today.

Documents are addressed by UUID. States are integers — see Document lifecycle (0 GREY draft · 1 ORANGE needs-review · 2 RED overdue · 3 GREEN approved · 4 PURPLE archived). Node/item type: 1 = FOLDER, 2 = DOCUMENT.

Discovery & navigation

get_folder_tree

Returns the hierarchical folder and document tree for the Systems section of SystemHub. Each node includes its ID, title, type (1=FOLDER, 2=DOCUMENT), document state, owner full name, ownerId for filtering, optional secondary owner full name, publication status, isMasterTemplate, isRootMasterTemplate, and nested children when depth > 1. Optionally scope the result to a specific subtree by providing a parent folder UUID, or pass parent “root” (same as omitting parent) for the section root. Filter by type to get only folders or only documents. Filter by role to see items assigned to a specific role. Use this tool first to understand the organizational structure before navigating to specific documents. Default depth is 1 (this level only — nested children are omitted) so large libraries do not overflow the client. Paginate top-level nodes with page/limit (default 50). To expand a folder, call again with parent set to that folder UUID and depth 1. parent “root” is accepted and means the section root (same as omitting parent). For a flat paginated folder list, list_documents_by_owner with type: 1 also works. Before authoring, call get_authoring_contract or read https://systemhub.com/llms-full.txt (raw HTML not entity-escaped; H1–H3 only; four marker-* highlights; Trigger, then h3 steps, then Definition of done). Use ownerId for programmatic owner-based filtering. Results include both operational content (company-owned) and master templates (read-only reference content from the master workspace). Each node/item has isMasterTemplate; tree nodes also have isRootMasterTemplate. When the user asks about their own content, filter to isMasterTemplate=false. Do not edit, delete, move, or publish master templates. get_*_details on master template documents returns 404 — content lives in the master workspace only. Templates appear in trees for browsing.

ℹ️ Paged and shallow since 22 Sep 2026 — the description above may predate it. depth controls how many levels come back (default 1, top level only; max 20). page and limit page the top-level items (limit default 50, max 200; page starts at 1). Responses now carry page, limit, total, hasMore and depth. parent: "root" is accepted and means the top level, the same as omitting it; a folder id drills into that subtree. Call bare first, then open one folder at a time with its id and depth: 1.

Three known issues (logged, unfixed): the role filter is ignored and the full result returns whatever role you pass · a template folder cannot be opened by its own id, because that id is literally "root" (AI & Templates in Systems and Policies, Courses in Trainings) and collides with parent: "root" — raise depth from the top level instead (e.g. depth: 3) · owner comes back as an id, not the full name the description promises, and there is no ownerId field.

ParameterTypeRequiredNotes
parentstring (uuid) or stringNoUUID of a parent folder to scope the subtree, or “root” for the section root. Omit parent for the same as “root”.
typeintegerNoFilter by type: 1=FOLDER, 2=DOCUMENT
rolestring (uuid)NoFilter by role UUID to show only items assigned to that role
depthintegerNoHow many levels to return. 1 = this level only (no nested children). Default 1. Max 20. Drill in by calling again with parent set to a folder UUID.
pageintegerNoPage of top-level nodes (default 1)
limitintegerNoTop-level nodes per page (default 50, max 200)

Returns

FieldTypeNotes
treearray of objectContains: id, title, type, state, parent, ownerId, owner, secondaryOwnerId, secondaryOwner, published, isMasterTemplate, isRootMasterTemplate…
pageintegerPage that was returned
limitintegerPage size used
totalintegerTotal top-level nodes after depth clipping, before pagination
hasMorebooleanTrue when more top-level nodes exist — increase page
depthintegerDepth used for this response

get_policy_tree

Returns the hierarchical folder and document tree for the Policies section of SystemHub. Each node includes its ID, title, type (1=FOLDER, 2=DOCUMENT), document state, owner full name, ownerId for filtering, optional secondary owner full name, publication status, isMasterTemplate, isRootMasterTemplate, and nested children when depth > 1. Optionally scope the result to a specific subtree by providing a parent folder UUID, or pass parent “root” (same as omitting parent) for the section root. Filter by type to get only folders or only documents. Filter by role to see items assigned to a specific role. Default depth is 1 (this level only — nested children are omitted) so large libraries do not overflow the client. Paginate top-level nodes with page/limit (default 50). To expand a folder, call again with parent set to that folder UUID and depth 1. parent “root” is accepted and means the section root (same as omitting parent). For a flat paginated folder list, list_documents_by_owner with type: 1 also works. Use ownerId for programmatic owner-based filtering. Results include both operational content (company-owned) and master templates (read-only reference content from the master workspace). Each node/item has isMasterTemplate; tree nodes also have isRootMasterTemplate. When the user asks about their own content, filter to isMasterTemplate=false. Do not edit, delete, move, or publish master templates. get_*_details on master template documents returns 404 — content lives in the master workspace only. Templates appear in trees for browsing.

ℹ️ Paged and shallow since 22 Sep 2026 — the description above may predate it. depth controls how many levels come back (default 1, top level only; max 20). page and limit page the top-level items (limit default 50, max 200; page starts at 1). Responses now carry page, limit, total, hasMore and depth. parent: "root" is accepted and means the top level, the same as omitting it; a folder id drills into that subtree. Call bare first, then open one folder at a time with its id and depth: 1.

Three known issues (logged, unfixed): the role filter is ignored and the full result returns whatever role you pass · a template folder cannot be opened by its own id, because that id is literally "root" (AI & Templates in Systems and Policies, Courses in Trainings) and collides with parent: "root" — raise depth from the top level instead (e.g. depth: 3) · owner comes back as an id, not the full name the description promises, and there is no ownerId field.

ParameterTypeRequiredNotes
parentstring (uuid) or stringNoUUID of a parent folder to scope the subtree, or “root” for the section root. Omit parent for the same as “root”.
typeintegerNoFilter by type: 1=FOLDER, 2=DOCUMENT
rolestring (uuid)NoFilter by role UUID to show only items assigned to that role
depthintegerNoHow many levels to return. 1 = this level only (no nested children). Default 1. Max 20. Drill in by calling again with parent set to a folder UUID.
pageintegerNoPage of top-level nodes (default 1)
limitintegerNoTop-level nodes per page (default 50, max 200)

Returns

FieldTypeNotes
treearray of objectContains: id, title, type, state, parent, ownerId, owner, secondaryOwnerId, secondaryOwner, published, isMasterTemplate, isRootMasterTemplate…
pageintegerPage that was returned
limitintegerPage size used
totalintegerTotal top-level nodes after depth clipping, before pagination
hasMorebooleanTrue when more top-level nodes exist — increase page
depthintegerDepth used for this response

get_training_tree

Returns the hierarchical folder and training document tree for the Training section of SystemHub. Each node includes its ID, title, type (1=FOLDER, 2=DOCUMENT), document state, owner full name, ownerId for filtering, optional secondary owner full name, publication status, isMasterTemplate, isRootMasterTemplate, and nested children when depth > 1. Optionally scope the result to a specific subtree by providing a parent folder UUID, or pass parent “root” (same as omitting parent) for the section root. Filter by type to get only folders or only trainings. Filter by role to see items assigned to a specific role. Use this tool first to understand the organizational structure before navigating to specific trainings. Default depth is 1 (this level only — nested children are omitted) so large libraries do not overflow the client. Paginate top-level nodes with page/limit (default 50). To expand a folder, call again with parent set to that folder UUID and depth 1. parent “root” is accepted and means the section root (same as omitting parent). For a flat paginated folder list, list_documents_by_owner with type: 1 also works. Use ownerId for programmatic owner-based filtering. Results include both operational content (company-owned) and master templates (read-only reference content from the master workspace). Each node/item has isMasterTemplate; tree nodes also have isRootMasterTemplate. When the user asks about their own content, filter to isMasterTemplate=false. Do not edit, delete, move, or publish master templates. get_*_details on master template documents returns 404 — content lives in the master workspace only. Templates appear in trees for browsing.

ℹ️ Paged and shallow since 22 Sep 2026 — the description above may predate it. depth controls how many levels come back (default 1, top level only; max 20). page and limit page the top-level items (limit default 50, max 200; page starts at 1). Responses now carry page, limit, total, hasMore and depth. parent: "root" is accepted and means the top level, the same as omitting it; a folder id drills into that subtree. Call bare first, then open one folder at a time with its id and depth: 1.

Three known issues (logged, unfixed): the role filter is ignored and the full result returns whatever role you pass · a template folder cannot be opened by its own id, because that id is literally "root" (AI & Templates in Systems and Policies, Courses in Trainings) and collides with parent: "root" — raise depth from the top level instead (e.g. depth: 3) · owner comes back as an id, not the full name the description promises, and there is no ownerId field.

ParameterTypeRequiredNotes
parentstring (uuid) or stringNoUUID of a parent folder to scope the subtree, or “root” for the section root. Omit parent for the same as “root”.
typeintegerNoFilter by type: 1=FOLDER, 2=DOCUMENT
rolestring (uuid)NoFilter by role UUID to show only items assigned to that role
depthintegerNoHow many levels to return. 1 = this level only (no nested children). Default 1. Max 20. Drill in by calling again with parent set to a folder UUID.
pageintegerNoPage of top-level nodes (default 1)
limitintegerNoTop-level nodes per page (default 50, max 200)

Returns

FieldTypeNotes
treearray of objectContains: id, title, type, state, parent, ownerId, owner, secondaryOwnerId, secondaryOwner, published, isMasterTemplate, isRootMasterTemplate…
pageintegerPage that was returned
limitintegerPage size used
totalintegerTotal top-level nodes after depth clipping, before pagination
hasMorebooleanTrue when more top-level nodes exist — increase page
depthintegerDepth used for this response

search_by_name

Searches for system documents and folders by title using case-insensitive partial matching. To search document bodies/URLs, use search_content. Returns a paginated list of matching items with their ID, title, type (1=FOLDER, 2=DOCUMENT), document state, discriminator, owner full name, ownerId, optional secondary owner full name, shareLink (public web URL or null), document content, tags, templates (numbered, with title/subject/details), Videos & Media (numbered media links with title and videoLink), attachments (folder/file tree with download URLs), comments (discussion threads with nested replies), and isMasterTemplate. Use the ‘page’ and ‘limit’ parameters to control pagination. This is useful for finding specific documents when you don’t know their UUID or location in the folder tree. Use ownerId for programmatic owner-based filtering. REQUIRED: When presenting document details/content, place Share link immediately after Notes. When shareLink is present, always show the full URL (including search results) — this is the same link users copy from the SystemHub UI and opens in a browser. Never hide an existing share link. When shareLink is null, show “Not available” and suggest get_document_share_link if they need one. When presenting document.content HTML (including from search results): render the content faithfully — do not paraphrase or invent surrounding sentences. Any hyperlink in the document must be shown only as its anchor text as a clickable link (e.g. markdown anchor text). Do not add prefixes such as “Link:”, “Additional link:”, or similar. Do not describe the link in prose. Do not append the raw URL in parentheses after the label. If the anchor has no label, show the URL itself as plain linked text. Results include both operational content (company-owned) and master templates (read-only reference content from the master workspace). Each node/item has isMasterTemplate; tree nodes also have isRootMasterTemplate. When the user asks about their own content, filter to isMasterTemplate=false. Do not edit, delete, move, or publish master templates. get_*_details on master template documents returns 404 — content lives in the master workspace only. Templates appear in trees for browsing.

ℹ️ fields since 1 Oct 2026 — this snapshot predates it, so the parameter table above doesn’t list it. All three title searches accept an optional fields array; each match then returns only id plus what you list, and HTML bodies, videos & media, attachments, comments and share-link lookups are skipped unless requested. content, description and note come back nested under document. Allowed values: id, title, type, state, discriminator, parent, ownerId, owner, secondaryOwnerId, secondaryOwner, createdAt, reviewDate, isMasterTemplate, shareLink, document, content, description, note, tags, templates, videosAndMedia, attachments, comments (plus isLearningTrack, hasLearningTracks and learningTracks on search_training). Omit fields and you get the full payload as before. For a lightweight list: {"query": "onboarding", "fields": ["title","state","owner"]}. Verified against the live schema and a live call on 3 Oct 2026.

ParameterTypeRequiredNotes
querystringYesSearch string to match against document/folder titles
pageintegerNoPage number (default 1)
limitintegerNoResults per page (default 20, max 100)

Returns

FieldTypeNotes
itemsarray of objectContains: id, title, type, state, discriminator, parent, ownerId, owner, secondaryOwnerId, secondaryOwner, createdAt, reviewDate…

search_policy

Searches for policy documents and folders by title using case-insensitive partial matching. To search document bodies/URLs, use search_content. Returns a paginated list of matching items with their ID, title, type (1=FOLDER, 2=DOCUMENT), document state, discriminator, owner full name, ownerId, optional secondary owner full name, shareLink (public web URL or null), document content, tags, templates (numbered, with title/subject/details), Videos & Media (numbered media links with title and videoLink), attachments (folder/file tree with download URLs), comments (discussion threads with nested replies), and isMasterTemplate. Use the ‘page’ and ‘limit’ parameters to control pagination. Use ownerId for programmatic owner-based filtering. REQUIRED: When presenting document details/content, place Share link immediately after Notes. When shareLink is present, always show the full URL (including search results) — this is the same link users copy from the SystemHub UI and opens in a browser. Never hide an existing share link. When shareLink is null, show “Not available” and suggest get_document_share_link if they need one. When presenting document.content HTML (including from search results): render the content faithfully — do not paraphrase or invent surrounding sentences. Any hyperlink in the document must be shown only as its anchor text as a clickable link (e.g. markdown anchor text). Do not add prefixes such as “Link:”, “Additional link:”, or similar. Do not describe the link in prose. Do not append the raw URL in parentheses after the label. If the anchor has no label, show the URL itself as plain linked text. Results include both operational content (company-owned) and master templates (read-only reference content from the master workspace). Each node/item has isMasterTemplate; tree nodes also have isRootMasterTemplate. When the user asks about their own content, filter to isMasterTemplate=false. Do not edit, delete, move, or publish master templates. get_*_details on master template documents returns 404 — content lives in the master workspace only. Templates appear in trees for browsing.

ℹ️ fields since 1 Oct 2026 — this snapshot predates it, so the parameter table above doesn’t list it. All three title searches accept an optional fields array; each match then returns only id plus what you list, and HTML bodies, videos & media, attachments, comments and share-link lookups are skipped unless requested. content, description and note come back nested under document. Allowed values: id, title, type, state, discriminator, parent, ownerId, owner, secondaryOwnerId, secondaryOwner, createdAt, reviewDate, isMasterTemplate, shareLink, document, content, description, note, tags, templates, videosAndMedia, attachments, comments (plus isLearningTrack, hasLearningTracks and learningTracks on search_training). Omit fields and you get the full payload as before. For a lightweight list: {"query": "onboarding", "fields": ["title","state","owner"]}. Verified against the live schema and a live call on 3 Oct 2026.

ParameterTypeRequiredNotes
querystringYesSearch string to match against document/folder titles
pageintegerNoPage number (default 1)
limitintegerNoResults per page (default 20, max 100)

Returns

FieldTypeNotes
itemsarray of objectContains: id, title, type, state, discriminator, parent, ownerId, owner, secondaryOwnerId, secondaryOwner, createdAt, reviewDate…

search_training

Searches for training documents and folders by title using case-insensitive partial matching. To search document bodies/URLs, use search_content. Returns a paginated list of matching items with their ID, title, type (1=FOLDER, 2=DOCUMENT), document state, discriminator, owner full name, ownerId, optional secondary owner full name, shareLink (public web URL or null), document content, tags, templates (numbered, with title/subject/details), Videos & Media (numbered media links with title and videoLink), attachments (folder/file tree with download URLs), comments (discussion threads with nested replies), learning tracks (numbered curriculum steps for training documents), and isMasterTemplate. Use the ‘page’ and ‘limit’ parameters to control pagination. Use ownerId for programmatic owner-based filtering. REQUIRED: When presenting document details/content, place Share link immediately after Notes. When shareLink is present, always show the full URL (including search results) — this is the same link users copy from the SystemHub UI and opens in a browser. Never hide an existing share link. When shareLink is null, show “Not available” and suggest get_document_share_link if they need one.

ℹ️ fields since 1 Oct 2026 — this snapshot predates it, so the parameter table above doesn’t list it. All three title searches accept an optional fields array; each match then returns only id plus what you list, and HTML bodies, videos & media, attachments, comments and share-link lookups are skipped unless requested. content, description and note come back nested under document. Allowed values: id, title, type, state, discriminator, parent, ownerId, owner, secondaryOwnerId, secondaryOwner, createdAt, reviewDate, isMasterTemplate, shareLink, document, content, description, note, tags, templates, videosAndMedia, attachments, comments (plus isLearningTrack, hasLearningTracks and learningTracks on search_training). Omit fields and you get the full payload as before. For a lightweight list: {"query": "onboarding", "fields": ["title","state","owner"]}. Verified against the live schema and a live call on 3 Oct 2026.

ParameterTypeRequiredNotes
querystringYesSearch string to match against training document/folder titles
pageintegerNoPage number (default 1)
limitintegerNoResults per page (default 20, max 100)

Returns

FieldTypeNotes
itemsarray of objectContains: id, title, type, state, discriminator, parent, ownerId, owner, secondaryOwnerId, secondaryOwner, createdAt, reviewDate…

search_content

Searches document bodies for a literal substring — overview/details/notes, including URLs and phrases. Use this for body/URL/phrase audits. Use search_by_name / search_policy / search_training for titles. Results are snippets only; call get_system_details / get_policy_details / get_training_details only for documents you will edit. Pair with edit_system_content, edit_policy_content, or edit_training_content for surgical find/replace.

ParameterTypeRequiredNotes
querystringYesLiteral substring in overview/details/notes (URLs, phrases). Not a title search.
sectionenum: system · policy · trainingNoLimit to one section. Omit to search systems, policies, and trainings together.
folderstring (uuid)NoLimit to this folder subtree from get_folder_tree
pageintegerNoPage number (default 1)
limitintegerNoResults per page (default 20, max 100)

Returns

FieldTypeNotes
itemsarray of objectContains: id, title, discriminator, matchedField, snippet
pageinteger
limitinteger
hasMorebooleanTrue when more pages are available — increase page or limit.

list_documents_by_owner

Returns a flat, paginated list of SystemHub documents (systems + policies + trainings) — in one call, without per-document detail requests. Each item includes id, title, type (1=FOLDER, 2=DOCUMENT), state, section (discriminator), folder path (materializedPath), and owner metadata. Omit owner, secondaryOwner, and roleId to list every item the caller can see (use type: 1 for a company-wide folder list). filterApplied is false in that case. Use owner or secondaryOwner as a user UUID or full name to narrow results. Use ownership=either (default) to find documents where someone is primary OR distinct secondary owner. Use roleId to filter by assigned role. Omit section to search all three areas at once. Set fetchAll=true to retrieve every matching document across pages (up to 5000). Use ownerId for programmatic owner-based filtering.

ParameterTypeRequiredNotes
ownerstringNoPrimary owner UUID or full name (e.g. “Jane Smith”). Omit together with secondaryOwner and roleId to list every item the caller can see.
secondaryOwnerstringNoSecondary owner UUID or full name. When set alone, returns documents with this distinct secondary owner.
roleIdstring (uuid)NoRole UUID. Returns documents assigned to this role.
ownershipenum: primary · secondary · eitherNoHow to match owner when owner is set: primary (owner_id only), secondary (distinct secondary owner only), either (primary OR distinct secondary). Default: either.
sectionenum: system · policy · trainingNoLimit to one section. Omit to search systems, policies, and trainings together.
typeintegerNoItem type: 1=FOLDER, 2=DOCUMENT. Default 2 (documents only).
pageintegerNoPage number (default 1)
limitintegerNoResults per page (default 100, max 500). Use fetchAll to retrieve every matching document.
fetchAllbooleanNoWhen true, automatically fetches all pages (up to 5000 documents) so you get every match in one response.

Returns

FieldTypeNotes
itemsarray of objectContains: id, title, type, state, discriminator, materializedPath, parent, ownerId, owner, secondaryOwnerId, secondaryOwner
pageinteger
limitinteger
totalintegerTotal matching items across all pages, when the API provides it
hasMorebooleanTrue when more pages are available — increase page or set fetchAll.
filterAppliedbooleanTrue when owner, secondaryOwner, or roleId narrowed the results. False when listing every item the caller can see.

Reading documents

get_system_details

Retrieves details of a system document by UUID. By default returns the full payload (title, state, HTML content, description, notes, tags, templates, Videos & Media, attachments, comments, owners, review date, last modified, published version, isMasterTemplate, shareLink). Pass fields (e.g. [“title”,“description”,“note”]) to return only those properties and skip expensive side fetches — use this for audits/overviews so you do not download full HTML bodies. Check isMasterTemplate from tree/search before calling — master template documents return 404 here. CRITICAL: If shareLink is a non-null URL, you MUST display it in a Share link section whenever you present document details or content — never omit an existing share link.

ParameterTypeRequiredNotes
idstring (uuid)YesUUID of the system document
fieldsarray of enum: id · title · type · state · discriminator · parent · ownerId · owner · secondaryOwnerId · secondaryOwner · createdAt · updatedAt · published · versionId · versionTitle · versionCreatedAt · reviewDate · isMasterTemplate · shareLink · document · content · description · note · tags · templates · videosAndMedia · attachments · commentsNoOptional field filter to reduce token usage. When set, only id plus the listed fields are returned (content/description/note are projected under document). Omit for the full document payload. Example: [“title”,“description”,“note”] to audit Overviews without downloading HTML content. Skips videos/attachments/comments/shareLink/version HTTP calls when those fields are not requested.

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the system document
titlestringDisplay name of the system document
typenumberItem type: 1=FOLDER, 2=DOCUMENT
statenumberDocument state: 0=GREY/draft, 1=ORANGE/needs-review, 2=RED/overdue, 3=GREEN/approved, 4=PURPLE/archived
discriminatorstringItem category: System, Policy, or Training
parentstring (uuid) or nullUUID of the parent folder, or null for root items
ownerIdstring (uuid) or nullUUID of the primary owner — use for owner-based filtering
ownerstring or nullFull name of the primary owner
secondaryOwnerIdstring (uuid)UUID of the secondary owner — omitted when not set
secondaryOwnerstringFull name of the secondary owner — omitted when not set
createdAtstringISO timestamp of when the document was created
updatedAtstringISO timestamp of when the live document was last modified
publishedbooleanWhether the document has at least one published version snapshot
versionIdstring (uuid) or nullUUID of the latest published version snapshot, or null when never published
versionTitlestring or nullTitle/label of the latest published version, or null when never published
versionCreatedAtstring or nullISO timestamp when the latest version was published, or null when never published
reviewDatestring or nullISO timestamp of the next scheduled review, or null if not set
isMasterTemplatebooleanTrue if this item is a read-only master template from the master workspace, not company-owned operational content. When the user asks about their own content, filter to isMasterTemplate=false.
shareLinkstring (uri) or nullPublic share URL matching the SystemHub UI (e.g. https://{company}.systemhub.com/systems/{id}/{shareCode}). Always surface this to the user when non-null. Null when no share code exists, the item is a folder, or the user lacks SHARE permission.
documentobject or nullDocument content details, or null for folders
tagsarray of objectTags associated with this system document Contains: id, title, createdAt
templatesarray of objectNumbered document templates (title, subject, details) attached to this system document Contains: number, title, subject, details
videosAndMediaarray of objectVideos & Media — numbered media links (title, videoLink) on this system document Contains: number, id, title, videoLink
attachmentsarray of objectAttachments — tree of folders and files on this document. Files include downloadUrl for downloading the attached file. Contains: id, title, type, downloadUrl, children
commentsarray of objectComments — discussion threads on this system document, each with nested replies Contains: id, createdAt, author, text, quote, topicType, replies

get_policy_details

Retrieves details of a policy document by UUID. By default returns the full payload (title, state, HTML content, description, notes, tags, templates, Videos & Media, attachments, comments, owners, review date, last modified, published version, isMasterTemplate, shareLink). Pass fields (e.g. [“title”,“description”,“note”]) to return only those properties and skip expensive side fetches — use this for audits/overviews so you do not download full HTML bodies. Check isMasterTemplate from tree/search before calling — master template documents return 404 here. CRITICAL: If shareLink is a non-null URL, you MUST display it in a Share link section whenever you present document details or content — never omit an existing share link.

ParameterTypeRequiredNotes
idstring (uuid)YesUUID of the policy document
fieldsarray of enum: id · title · type · state · discriminator · parent · ownerId · owner · secondaryOwnerId · secondaryOwner · createdAt · updatedAt · published · versionId · versionTitle · versionCreatedAt · reviewDate · isMasterTemplate · shareLink · document · content · description · note · tags · templates · videosAndMedia · attachments · commentsNoOptional field filter to reduce token usage. When set, only id plus the listed fields are returned (content/description/note are projected under document). Omit for the full document payload. Example: [“title”,“description”,“note”] to audit Overviews without downloading HTML content. Skips videos/attachments/comments/shareLink/version HTTP calls when those fields are not requested.

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the policy document
titlestringDisplay name of the policy document
typenumberItem type: 1=FOLDER, 2=DOCUMENT
statenumberDocument state: 0=GREY/draft, 1=ORANGE/needs-review, 2=RED/overdue, 3=GREEN/approved, 4=PURPLE/archived
discriminatorstringItem category: System, Policy, or Training
parentstring (uuid) or nullUUID of the parent folder, or null for root items
ownerIdstring (uuid) or nullUUID of the primary owner — use for owner-based filtering
ownerstring or nullFull name of the primary owner
secondaryOwnerIdstring (uuid)UUID of the secondary owner — omitted when not set
secondaryOwnerstringFull name of the secondary owner — omitted when not set
createdAtstringISO timestamp of when the document was created
updatedAtstringISO timestamp of when the live document was last modified
publishedbooleanWhether the document has at least one published version snapshot
versionIdstring (uuid) or nullUUID of the latest published version snapshot, or null when never published
versionTitlestring or nullTitle/label of the latest published version, or null when never published
versionCreatedAtstring or nullISO timestamp when the latest version was published, or null when never published
reviewDatestring or nullISO timestamp of the next scheduled review, or null if not set
isMasterTemplatebooleanTrue if this item is a read-only master template from the master workspace, not company-owned operational content. When the user asks about their own content, filter to isMasterTemplate=false.
shareLinkstring (uri) or nullPublic share URL matching the SystemHub UI (e.g. https://{company}.systemhub.com/systems/{id}/{shareCode}). Always surface this to the user when non-null. Null when no share code exists, the item is a folder, or the user lacks SHARE permission.
documentobject or nullDocument content details, or null for folders
tagsarray of objectTags associated with this policy document Contains: id, title, createdAt
templatesarray of objectNumbered document templates (title, subject, details) attached to this policy document Contains: number, title, subject, details
videosAndMediaarray of objectVideos & Media — numbered media links (title, videoLink) on this policy document Contains: number, id, title, videoLink
attachmentsarray of objectAttachments — tree of folders and files on this document. Files include downloadUrl for downloading the attached file. Contains: id, title, type, downloadUrl, children
commentsarray of objectComments — discussion threads on this policy document, each with nested replies Contains: id, createdAt, author, text, quote, topicType, replies

get_training_details

Retrieves details of a training document by UUID. By default returns the full payload (title, state, HTML content, description, notes, tags, templates, Videos & Media, attachments, comments, learning tracks, owners, review date, last modified, published version, isMasterTemplate, shareLink). Pass fields (e.g. [“title”,“description”,“note”]) to return only those properties and skip expensive side fetches — use this for audits/overviews so you do not download full HTML bodies. Check isMasterTemplate from tree/search before calling — master template documents return 404 here. CRITICAL: If shareLink is a non-null URL, you MUST display it in a Share link section whenever you present document details or content — never omit an existing share link.

ParameterTypeRequiredNotes
idstring (uuid)YesUUID of the training document
fieldsarray of enum: id · title · type · state · discriminator · parent · ownerId · owner · secondaryOwnerId · secondaryOwner · createdAt · updatedAt · published · versionId · versionTitle · versionCreatedAt · reviewDate · isMasterTemplate · shareLink · document · content · description · note · tags · templates · videosAndMedia · attachments · comments · isLearningTrack · hasLearningTracks · learningTracksNoOptional field filter to reduce token usage. When set, only id plus the listed fields are returned (content/description/note are projected under document). Omit for the full document payload. Example: [“title”,“description”,“note”] to audit Overviews without downloading HTML content. Skips videos/attachments/comments/shareLink/learningTracks/version HTTP calls when those fields are not requested.

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the training document
titlestringDisplay name of the training document
typenumberItem type: 1=FOLDER, 2=DOCUMENT
statenumberDocument state: 0=GREY/draft, 1=ORANGE/needs-review, 2=RED/overdue, 3=GREEN/approved, 4=PURPLE/archived
discriminatorstringItem category: System, Policy, or Training
parentstring (uuid) or nullUUID of the parent folder, or null for root items
ownerIdstring (uuid) or nullUUID of the primary owner — use for owner-based filtering
ownerstring or nullFull name of the primary owner
secondaryOwnerIdstring (uuid)UUID of the secondary owner — omitted when not set
secondaryOwnerstringFull name of the secondary owner — omitted when not set
createdAtstringISO timestamp of when the training was created
updatedAtstringISO timestamp of when the live training was last modified
publishedbooleanWhether the training has at least one published version snapshot
versionIdstring (uuid) or nullUUID of the latest published version snapshot, or null when never published
versionTitlestring or nullTitle/label of the latest published version, or null when never published
versionCreatedAtstring or nullISO timestamp when the latest version was published, or null when never published
reviewDatestring or nullISO timestamp of the next scheduled review, or null if not set
isLearningTrackbooleanWhether this training document has learning track curriculum steps
hasLearningTracksbooleanWhether this training document has at least one learning track step
isMasterTemplatebooleanTrue if this item is a read-only master template from the master workspace, not company-owned operational content. When the user asks about their own content, filter to isMasterTemplate=false.
shareLinkstring (uri) or nullPublic share URL matching the SystemHub UI (e.g. https://{company}.systemhub.com/systems/{id}/{shareCode}). Always surface this to the user when non-null. Null when no share code exists, the item is a folder, or the user lacks SHARE permission.
documentobject or nullDocument content details, or null for folders
tagsarray of objectTags associated with this training document Contains: id, title, createdAt
templatesarray of objectNumbered document templates (title, subject, details) attached to this training document Contains: number, title, subject, details
videosAndMediaarray of objectVideos & Media — numbered media links (title, videoLink) on this training document Contains: number, id, title, videoLink
attachmentsarray of objectAttachments — tree of folders and files on this document. Files include downloadUrl for downloading the attached file. Contains: id, title, type, downloadUrl, children
commentsarray of objectComments — discussion threads on this training document, each with nested replies Contains: id, createdAt, author, text, quote, topicType, replies
learningTracksarray of objectLearning track curriculum steps for this training document, ordered by sortOrder Contains: number, id, baseItem, title, estimatedTime, discriminator, sortOrder, createdAt

Access, agreement & progress

get_document_members_and_roles

Retrieves assigned members and roles for a system, policy, or training document. Returns roles assigned to the document plus each member’s name, email, role title(s), and access type (direct assignment, role-based, or both). Use after finding the document UUID via search_by_name, search_policy, or search_training. Respects the authenticated user’s visibility scope. Set fetchAll=true (default) for a complete access audit.

ParameterTypeRequiredNotes
documentIdstring (uuid)YesUUID of the system, policy, or training document. Find it via search_by_name, search_policy, search_training, or get_*_details.
topicTypeenum: system · policy · trainingYesDocument section: “system” for procedures, “policy” for compliance documents, “training” for learning modules.
searchstringNoOptional filter — partial match on member first name, last name, or email
pageintegerNoPage number when not using fetchAll (default 1)
limitintegerNoResults per page when not using fetchAll (default 100, max 500)
fetchAllbooleanNoWhen true (default), fetches all assigned roles and members across pages (up to 5000 users) for a complete access audit.

Returns

FieldTypeNotes
documentIdstring (uuid)UUID of the document queried
topicTypeenum: system · policy · trainingDocument section that was queried
summaryobjectContains: assignedRoleCount, directMemberCount, roleMemberCount, totalUniqueMembers
assignedRolesarray of objectRoles currently assigned to this document Contains: roleId, roleTitle, description, membersAmount
membersarray of objectAll members with access, deduplicated by user Contains: userId, userName, firstName, lastName, email, userRole, accessType, roles

get_document_agreement_status

Retrieves sign-off / agreement status for a system, policy, or training document. Returns who has signed off (with timestamp) and who is still pending acknowledgement among users assigned to the document. Use after finding the document UUID via search_by_name, search_policy, or search_training. Respects the authenticated user’s visibility scope on the item API. Set fetchAll=true (default) for a complete audit list.

ParameterTypeRequiredNotes
documentIdstring (uuid)YesUUID of the system, policy, or training document. Find it via search_by_name, search_policy, search_training, or get_*_details.
topicTypeenum: system · policy · trainingYesDocument section: “system” for procedures, “policy” for compliance documents, “training” for learning modules.
firstNamestringNoOptional filter — partial match on user first or last name
lastNamestringNoOptional filter — partial match on user first or last name
pageintegerNoPage number when not using fetchAll (default 1)
limitintegerNoResults per page when not using fetchAll (default 100, max 500)
fetchAllbooleanNoWhen true (default), automatically fetches every assigned user across pages (up to 5000) so signed-off and pending lists are complete.

Returns

FieldTypeNotes
documentIdstring (uuid)UUID of the document queried
topicTypeenum: system · policy · trainingDocument section that was queried
summaryobjectHigh-level compliance counts Contains: totalAssigned, signedOffCount, pendingCount
signedOffUsersarray of objectUsers who have confirmed agreement, with sign-off timestamp Contains: userId, firstName, lastName, email, fullName, signedOffAt, agreementLogId
pendingUsersarray of objectUsers assigned to the document who have not yet signed off Contains: userId, firstName, lastName, email, fullName
hasMorebooleanTrue when pagination was used and more pages may exist — increase page or set fetchAll=true

get_document_training_progress

Retrieves learning completion progress for a training document. Returns each assigned user’s percentage complete (based on learning track sign-offs), status (complete, in progress, or not started), and last update time. Use after finding the training UUID via search_training or get_training_details. Respects the authenticated user’s visibility scope. Set fetchAll=true (default) for a complete audit list.

ParameterTypeRequiredNotes
documentIdstring (uuid)YesUUID of the training document. Find it via search_training or get_training_details — training progress only applies to training documents.
firstNamestringNoOptional filter — partial match on user first or last name
lastNamestringNoOptional filter — partial match on user first or last name
pageintegerNoPage number when not using fetchAll (default 1)
limitintegerNoResults per page when not using fetchAll (default 100, max 500)
fetchAllbooleanNoWhen true (default), automatically fetches every assigned user across pages (up to 5000) so progress lists are complete.

Returns

FieldTypeNotes
documentIdstring (uuid)UUID of the training document queried
summaryobjectHigh-level completion counts Contains: totalAssigned, completeCount, inProgressCount, notStartedCount
usersarray of objectAll assigned users with progress percentage and status Contains: userId, firstName, lastName, email, fullName, percentage, status, updatedAt
completeUsersarray of anyUsers who completed the training (100%)
inProgressUsersarray of anyUsers who started but have not completed the training
notStartedUsersarray of anyUsers with no recorded training progress
hasMorebooleanTrue when pagination was used and more pages may exist — increase page or set fetchAll=true

get_document_activity_log

Retrieves the activity / audit trail for a system, policy, or training document. Returns who created it and when, who last modified it (with change summary when available), and a chronological feed of significant create/modify events. Use after finding the document UUID via search_by_name, search_policy, search_training, or get_*_details. Answers questions like “Who created this system?” and “Who last edited this policy?”. Respects the authenticated user’s view permissions on the item API. Set fetchAll=true (default) for a complete history. Present activity as an audit summary: lead with creation (who/when) and last modification (who/when/what), then list significant events chronologically. Prefer full names and emails. Skip routine view events unless the user explicitly asks for views.

ParameterTypeRequiredNotes
documentIdstring (uuid)YesUUID of the system, policy, or training document. Find it via search_by_name, search_policy, search_training, or get_*_details.
topicTypeenum: system · policy · trainingYesDocument section: “system” for procedures, “policy” for compliance documents, “training” for learning modules.
includeViewsbooleanNoWhen true, include routine document view events in the feed. Default false — only create and modify events are returned.
pageintegerNoPage number when not using fetchAll (default 1)
limitintegerNoResults per page when not using fetchAll (default 100, max 500)
fetchAllbooleanNoWhen true (default), fetches activity log pages until complete (up to 5000 entries) so creation and last modification are accurate.

Returns

FieldTypeNotes
documentIdstring (uuid)UUID of the document queried
topicTypeenum: system · policy · trainingDocument section that was queried
creationobject or nullEarliest create event, or null if none found
lastModificationany or nullMost recent modify event, or null if the document was never modified after creation
eventsarray of anyChronological feed of significant activity events (create/modify by default)
summaryobjectActivity counts derived from the fetched logs Contains: totalEvents, createCount, modifyCount, viewCount
hasMorebooleanTrue when pagination was used and more pages may exist — increase page or set fetchAll=true

Sharing, members & roles

Retrieves the public share URL for a system, policy, or training document. Reuses the existing share code when present (typical — share codes are assigned when documents are created); creates one only when missing. Requires SHARE permission for the document type. Use after finding the document UUID via search_by_name, search_policy, search_training, or get_*_details. Returns shareLink as the same human-facing URL shown in the SystemHub UI. REQUIRED: When presenting document details/content, place Share link immediately after Notes. When shareLink is present, always show the full URL (including search results) — this is the same link users copy from the SystemHub UI and opens in a browser. Never hide an existing share link. When shareLink is null, show “Not available” and suggest get_document_share_link if they need one.

ParameterTypeRequiredNotes
documentIdstring (uuid)YesUUID of the system, policy, or training document. Find it via search_by_name, search_policy, search_training, or get_*_details.
topicTypeenum: system · policy · trainingYesDocument section: “system” for procedures, “policy” for compliance documents, “training” for learning modules.

Returns

FieldTypeNotes
documentIdstring (uuid)UUID of the document the share link belongs to
topicTypeenum: system · policy · trainingDocument section that was used
shareCodestringShare token stored on the document
shareLinkstring (uri)Public share URL matching the SystemHub UI. Opens the shared document in a browser.
createdbooleanTrue only when no share code existed and one was created; false when an existing share code was reused (the common case — documents get a share code at creation).

manage_document_members

Adds, removes, or updates assigned members and roles on a system, policy, or training document. Use action=add|remove with userIds for direct member access, and/or roleIds for company roles assigned to the document. When the user gives a person or role name (not UUID), call list_company_members (search) or list_roles (title) first — never ask the user to look up UUIDs. Use action=update with roleIds to replace the document’s assigned roles. Requires document UPDATE (or role-assignment) permission. Verify results afterward with get_document_members_and_roles.

ParameterTypeRequiredNotes
documentIdstring (uuid)YesUUID of the system, policy, or training document. Find it via search_by_name, search_policy, search_training, or get_*_details.
topicTypeenum: system · policy · trainingYesDocument section: “system” for procedures, “policy” for compliance documents, “training” for learning modules.
actionenum: add · remove · updateYes”add” assigns members and/or roles, “remove” unassigns them, “update” replaces the document’s assigned roles with roleIds (use add/remove for direct members).
userIdsarray of string (uuid)NoUser UUIDs for direct member assignment on the document. Resolve names via list_company_members (e.g. search=“Ariel Tester”) first — do not ask the user for UUIDs. Required for member add/remove. Omit when only managing roles.
roleIdsanyNoCompany role UUIDs to assign to or remove from the document. Resolve names via list_roles (e.g. title=“Tech Team”) first — do not ask the user for UUIDs. Required for role add/remove/update. Omit when only managing direct members.

Returns

FieldTypeNotes
documentIdstring (uuid)UUID of the document that was updated
topicTypeenum: system · policy · trainingDocument section that was updated
actionenum: add · remove · updateAction that was performed
membersarray of objectPer-user outcomes for direct member changes Contains: userId, status
rolesarray of objectPer-role outcomes for document role assignment changes Contains: roleId, status
summaryobjectContains: membersAdded, membersRemoved, membersSkipped, rolesAdded, rolesRemoved, rolesSkipped

list_company_members

Lists company members and resolves people by name or email to UUIDs. Use when the user names someone (e.g. “Ariel Tester”) before manage_document_members, which requires userIds. Filter with search for a full name or email; check exactNameMatch for an exact name hit. Returns userId, fullName, email, userType, and position.

ParameterTypeRequiredNotes
searchstringNoResolve a person by full name or email (e.g. “Ariel Tester” or “ariel@example.com”). Splits names into first/last for lookup. Use before manage_document_members when the user gives a name instead of a UUID.
firstNamestringNoOptional case-insensitive partial match on first name. Ignored when search is provided.
lastNamestringNoOptional case-insensitive partial match on last name. Ignored when search is provided.
emailstringNoOptional case-insensitive partial match on email. Ignored when search is provided.
pageintegerNoPage number (default 1)
limitintegerNoResults per page when not using fetchAll (default 100, max 500)
fetchAllbooleanNoWhen true (default), fetches all matching members across pages (up to 5000) so name lookup is complete.

Returns

FieldTypeNotes
membersarray of objectMatching company members Contains: userId, fullName, firstName, lastName, email, userType, status, position
pageintegerPage that was returned (1 when fetchAll)
limitintegerPage size used for the request
hasMorebooleanTrue when more pages exist and fetchAll was false
exactNameMatchany or nullMember whose full name exactly matches the search string (case-insensitive), or null

list_roles

Lists company roles and resolves role names to UUIDs. Use when the user names a role (e.g. “Tech Team”) before manage_document_members, which requires roleIds. Filter with title for case-insensitive partial match; check exactTitleMatch for an exact name hit. Returns roleId, title, description, and membersAmount.

ParameterTypeRequiredNotes
titlestringNoOptional case-insensitive partial match on role title (e.g. “Tech Team”). Omit to list roles without a title filter.
pageintegerNoPage number (default 1)
limitintegerNoResults per page when not using fetchAll (default 100, max 500)
fetchAllbooleanNoWhen true (default), fetches all matching roles across pages (up to 5000) so name lookup is complete.

Returns

FieldTypeNotes
rolesarray of objectMatching company roles Contains: roleId, title, description, membersAmount
pageintegerPage that was returned (1 when fetchAll)
limitintegerPage size used for the request
hasMorebooleanTrue when more pages exist and fetchAll was false
exactTitleMatchany or nullRole whose title exactly matches the title filter (case-insensitive), or null

Creating content

create_system

Creates a new system document inside an existing folder. Requires the parent folder UUID (use get_folder_tree to find one) and a title. Optionally provide content (HTML), description, note, and state in the same call. Documents with content are published automatically so assigned users can see them — do not ask the user to confirm publishing. Set publish: false only to keep the document as a draft.

ParameterTypeRequiredNotes
parentstring (uuid)YesUUID of the parent folder
titlestringYesTitle of the new system document
contentstringNoDocument content as raw HTML (e.g.

Title

). Pass real tags, not entity-escaped markup (<h2>). Fully entity-escaped content is auto-corrected; content mixing escaped markup with real tags is rejected with an error asking you to resend raw HTML.
descriptionstringNoHTML overview (not plain text). Accepts, stores, and renders HTML using the same editor rules as the document body.
notestringNoSupporting note as raw HTML (e.g.

Note

). Renders on the published document and public share links — do NOT put private context here. Pass real tags, not entity-escaped markup (<p>). Fully entity-escaped notes are auto-corrected; notes mixing escaped markup with real tags are rejected with an error asking you to resend raw HTML.
stateintegerNoDocument state: 0=GREY, 1=ORANGE, 2=RED, 3=GREEN, 4=PURPLE
publishbooleanNoWhen false, skips publishing after creation. By default, documents with content are published automatically so assigned users can see them.
publishTitlestringNoOptional version title/label when publishing (e.g. ‘v1.0 - Initial release’)

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the created system document
titlestringTitle of the created document
typenumberItem type: 2=DOCUMENT
statenumberDocument state (0=GREY/draft for newly created)
parentstring (uuid) or nullUUID of the parent folder
publishedbooleanWhether a version snapshot was published
versionIdstring (uuid)UUID of the published version when published=true
versionTitlestringTitle of the published version when published=true
versionCreatedAtstringISO timestamp of version creation when published=true

create_policy

Creates a new policy document inside an existing folder. Requires the parent folder UUID (use get_policy_tree to find one) and a title. Optionally provide content (HTML), description, note, and state in the same call. Documents with content are published automatically so assigned users can see them — do not ask the user to confirm publishing. Set publish: false only to keep the document as a draft.

ParameterTypeRequiredNotes
parentstring (uuid)YesUUID of the parent folder
titlestringYesTitle of the new policy document
contentstringNoDocument content as raw HTML (e.g.

Title

). Pass real tags, not entity-escaped markup (<h2>). Fully entity-escaped content is auto-corrected; content mixing escaped markup with real tags is rejected with an error asking you to resend raw HTML.
descriptionstringNoHTML overview (not plain text). Accepts, stores, and renders HTML using the same editor rules as the document body.
notestringNoSupporting note as raw HTML (e.g.

Note

). Renders on the published document and public share links — do NOT put private context here. Pass real tags, not entity-escaped markup (<p>). Fully entity-escaped notes are auto-corrected; notes mixing escaped markup with real tags are rejected with an error asking you to resend raw HTML.
stateintegerNoDocument state: 0=GREY, 1=ORANGE, 2=RED, 3=GREEN, 4=PURPLE
publishbooleanNoWhen false, skips publishing after creation. By default, documents with content are published automatically so assigned users can see them.
publishTitlestringNoOptional version title/label when publishing (e.g. ‘v1.0 - Initial release’)

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the created policy document
titlestringTitle of the created document
typenumberItem type: 2=DOCUMENT
statenumberDocument state (0=GREY/draft for newly created)
parentstring (uuid) or nullUUID of the parent folder
publishedbooleanWhether a version snapshot was published
versionIdstring (uuid)UUID of the published version when published=true
versionTitlestringTitle of the published version when published=true
versionCreatedAtstringISO timestamp of version creation when published=true

create_training

Creates a new training document inside an existing folder. Requires the parent folder UUID (use get_training_tree to find one) and a title. Optionally provide content (HTML), description, note, and state in the same call. Documents with content are published automatically so assigned users can see them — do not ask the user to confirm publishing. Set publish: false only to keep the document as a draft.

ParameterTypeRequiredNotes
parentstring (uuid)YesUUID of the parent folder where the training will be created
titlestringYesTitle of the new training document
contentstringNoDocument content as raw HTML (e.g.

Title

). Pass real tags, not entity-escaped markup (<h2>). Fully entity-escaped content is auto-corrected; content mixing escaped markup with real tags is rejected with an error asking you to resend raw HTML.
descriptionstringNoHTML overview (not plain text). Accepts, stores, and renders HTML using the same editor rules as the document body.
notestringNoSupporting note as raw HTML (e.g.

Note

). Renders on the published document and public share links — do NOT put private context here. Pass real tags, not entity-escaped markup (<p>). Fully entity-escaped notes are auto-corrected; notes mixing escaped markup with real tags are rejected with an error asking you to resend raw HTML.
stateintegerNoDocument state: 0=GREY, 1=ORANGE, 2=RED, 3=GREEN, 4=PURPLE
publishbooleanNoWhen false, skips publishing after creation. By default, documents with content are published automatically so assigned users can see them.
publishTitlestringNoOptional version title/label when publishing (e.g. ‘v1.0 - Initial release’)

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the created training document
titlestringTitle of the created training document
typenumberItem type: 2=DOCUMENT
statenumberDocument state (0=GREY/draft for newly created)
parentstring (uuid) or nullUUID of the parent folder
publishedbooleanWhether a version snapshot was published
versionIdstring (uuid)UUID of the published version when published=true
versionTitlestringTitle of the published version when published=true
versionCreatedAtstringISO timestamp of version creation when published=true

create_folder

Creates a new folder in the Systems section of SystemHub. Folders organize system documents hierarchically. Provide a title for the folder and optionally a parent folder UUID to nest it under an existing folder. Omitting the parent creates a root-level folder. Returns the created folder’s ID, title, and type.

ParameterTypeRequiredNotes
titlestringYesFolder name
parentstring (uuid)NoUUID of parent folder; omit for root level

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the created folder
titlestringName of the created folder
typenumberItem type: 1=FOLDER
parentstring (uuid) or nullUUID of the parent folder, or null for root level

create_policy_folder

Creates a new folder in the Policies section of SystemHub. Folders organize policy documents hierarchically. Provide a title for the folder and optionally a parent folder UUID to nest it under an existing folder. Omitting the parent creates a root-level folder. Returns the created folder’s ID, title, and type.

ParameterTypeRequiredNotes
titlestringYesFolder name
parentstring (uuid)NoUUID of parent folder; omit for root level

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the created folder
titlestringName of the created folder
typenumberItem type: 1=FOLDER
parentstring (uuid) or nullUUID of the parent folder, or null for root level

create_training_folder

Creates a new folder in the Training section of SystemHub. Training folders organize training documents hierarchically. Provide a title for the folder and optionally a parent folder UUID to nest it under an existing folder. Omitting the parent creates a root-level folder. Returns the created folder’s ID, title, and type.

ParameterTypeRequiredNotes
titlestringYesFolder name
parentstring (uuid)NoUUID of parent folder; omit for root level

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the created folder
titlestringName of the created folder
typenumberItem type: 1=FOLDER
parentstring (uuid) or nullUUID of the parent folder, or null for root level

Editing & publishing

get_authoring_contract

Returns the systemHUB document formatting contract as structured data: allowed HTML (H1–H3 only, four marker-* highlights), field mapping (title/overview/details/notes), house structure (Trigger, h3 steps, Definition of done), and known issues. Call this before create_system / create_policy / create_training or any content edit. Does not require a web fetch. Full corpus: https://systemhub.com/llms-full.txt.

No parameters.

Returns

FieldTypeNotes
docsUrlstring (uri)Human docs hub
corpusUrlstring (uri)Full AI-facing corpus to read before authoring
sendRawHtmlstringRule: send raw HTML, never entity-escaped markup
editorFilterstringWhy unsupported formatting silently changes later
fieldsarray of objectThe four document content fields and what they map to Contains: name, label, purpose
allowedHtmlobjectFormatting that survives a human save in the editor Contains: headings, headingNote, inline, highlights, highlightNote, lists, blocks, tables, links, images
houseStructurearray of stringSYSTEMology house format: Trigger, h3 steps, Definition of done
knownIssuesarray of stringFailure modes agents hit when they skip this contract

edit_system

Updates an existing system document’s fields. Provide the document UUID and any combination of fields to update: title, content (HTML string), description, internal note, state (0=GREY, 1=ORANGE, 2=RED, 3=GREEN, 4=PURPLE), reviewDate, owner (primary owner UUID), or secondaryOwner (secondary owner UUID, or null to remove). Only provided fields are changed; omitted fields remain untouched. For small text/link fixes inside HTML content, prefer edit_system_content (find/replace) instead of resupplying the full content string. Edits are published automatically so assigned users can see them — do not ask the user to confirm publishing. Set publish: false only to save changes as a draft. Use reviewDate on edit_system, edit_policy, or edit_training to add, update, or remove a review date (ISO 8601; must be today or in the future; pass null to remove). Omit reviewDate to leave it unchanged. Review date changes are saved and published automatically in the background — do not mention publishing, versions, draft/publish status, or the published field in the tool response to the user. After editing reviewDate, confirm the saved date only from the reviewDate field in the tool output — never assume success from the user request alone. If reviewDate in the output does not match what was requested, report that the update failed. publish: false does not skip background publish for reviewDate changes. To mark overdue, set state: 2 (RED) separately.

ParameterTypeRequiredNotes
idstring (uuid)YesUUID of the system document to update
titlestringNoNew title
contentstringNoNew document content as raw HTML (e.g.

Title

). Pass real tags, not entity-escaped markup (<h2>). Fully entity-escaped content is auto-corrected; content mixing escaped markup with real tags is rejected with an error asking you to resend raw HTML.
descriptionstringNoNew HTML overview (not plain text). Accepts, stores, and renders HTML using the same editor rules as the document body.
notestringNoSupporting note as raw HTML (e.g.

Note

). Renders on the published document and public share links — do NOT put private context here. Pass real tags, not entity-escaped markup (<p>). Fully entity-escaped notes are auto-corrected; notes mixing escaped markup with real tags are rejected with an error asking you to resend raw HTML.
stateintegerNoDocument state: 0=GREY, 1=ORANGE, 2=RED, 3=GREEN, 4=PURPLE
reviewDatestring (date-time) or nullNoReview date in ISO 8601 format (e.g. “2030-01-15T00:00:00.000Z”) to add or update. Must be today or a future date. Pass null to remove the review date. Omit to leave unchanged.
ownerstring (uuid)NoUUID of the new primary owner
secondaryOwnerstring (uuid) or nullNoUUID of the new secondary owner, or null to remove (resets to primary owner)
publishbooleanNoWhen false, skips publishing after edits. By default, edits are published automatically so assigned users can see them. Set publish: true with only id to publish the current draft without further edits.
publishTitlestringNoOptional version title/label when publish is true (e.g. ‘v1.0 - Initial release’)

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the updated document
titlestringCurrent title after update
typenumberItem type: 1=FOLDER, 2=DOCUMENT
statenumberDocument state: 0=GREY, 1=ORANGE, 2=RED, 3=GREEN, 4=PURPLE
reviewDatestring or nullISO timestamp of the next scheduled review, or null if not set
publishedbooleanBackground publish status (for agent verification only). Do not mention publishing to the user for review date changes — confirm only the review date outcome.
publishErrorstringPresent when publish was attempted but failed; the document update still succeeded
versionIdstring (uuid)UUID of the published version when published=true
versionTitlestringTitle of the published version when published=true
versionCreatedAtstringISO timestamp of version creation when published=true

edit_policy

Updates an existing policy document’s fields. Provide the document UUID and any combination of fields to update: title, content (HTML string), description, internal note, state (0=GREY, 1=ORANGE, 2=RED, 3=GREEN, 4=PURPLE), reviewDate, owner (primary owner UUID), or secondaryOwner (secondary owner UUID, or null to remove). Only provided fields are changed; omitted fields remain untouched. For small text/link fixes inside HTML content, prefer edit_policy_content (find/replace) instead of resupplying the full content string. Edits are published automatically so assigned users can see them — do not ask the user to confirm publishing. Set publish: false only to save changes as a draft. Use reviewDate on edit_system, edit_policy, or edit_training to add, update, or remove a review date (ISO 8601; must be today or in the future; pass null to remove). Omit reviewDate to leave it unchanged. Review date changes are saved and published automatically in the background — do not mention publishing, versions, draft/publish status, or the published field in the tool response to the user. After editing reviewDate, confirm the saved date only from the reviewDate field in the tool output — never assume success from the user request alone. If reviewDate in the output does not match what was requested, report that the update failed. publish: false does not skip background publish for reviewDate changes. To mark overdue, set state: 2 (RED) separately.

ParameterTypeRequiredNotes
idstring (uuid)YesUUID of the policy document to update
titlestringNoNew title
contentstringNoNew document content as raw HTML (e.g.

Title

). Pass real tags, not entity-escaped markup (<h2>). Fully entity-escaped content is auto-corrected; content mixing escaped markup with real tags is rejected with an error asking you to resend raw HTML.
descriptionstringNoNew HTML overview (not plain text). Accepts, stores, and renders HTML using the same editor rules as the document body.
notestringNoSupporting note as raw HTML (e.g.

Note

). Renders on the published document and public share links — do NOT put private context here. Pass real tags, not entity-escaped markup (<p>). Fully entity-escaped notes are auto-corrected; notes mixing escaped markup with real tags are rejected with an error asking you to resend raw HTML.
stateintegerNoDocument state: 0=GREY, 1=ORANGE, 2=RED, 3=GREEN, 4=PURPLE
reviewDatestring (date-time) or nullNoReview date in ISO 8601 format (e.g. “2030-01-15T00:00:00.000Z”) to add or update. Must be today or a future date. Pass null to remove the review date. Omit to leave unchanged.
ownerstring (uuid)NoUUID of the new primary owner
secondaryOwnerstring (uuid) or nullNoUUID of the new secondary owner, or null to remove (resets to primary owner)
publishbooleanNoWhen false, skips publishing after edits. By default, edits are published automatically so assigned users can see them. Set publish: true with only id to publish the current draft without further edits.
publishTitlestringNoOptional version title/label when publish is true (e.g. ‘v1.0 - Initial release’)

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the updated document
titlestringCurrent title after update
typenumberItem type: 1=FOLDER, 2=DOCUMENT
statenumberDocument state: 0=GREY, 1=ORANGE, 2=RED, 3=GREEN, 4=PURPLE
reviewDatestring or nullISO timestamp of the next scheduled review, or null if not set
publishedbooleanBackground publish status (for agent verification only). Do not mention publishing to the user for review date changes — confirm only the review date outcome.
publishErrorstringPresent when publish was attempted but failed; the document update still succeeded
versionIdstring (uuid)UUID of the published version when published=true
versionTitlestringTitle of the published version when published=true
versionCreatedAtstringISO timestamp of version creation when published=true

edit_training

Updates an existing training document’s fields. Provide the training UUID and any combination of fields to update: title, content (HTML string), description, internal note, state (0=GREY, 1=ORANGE, 2=RED, 3=GREEN, 4=PURPLE), reviewDate, owner (primary owner UUID), or secondaryOwner (secondary owner UUID, or null to remove). Only provided fields are changed; omitted fields remain untouched. For small text/link fixes inside HTML content, prefer edit_training_content (find/replace) instead of resupplying the full content string. Edits are published automatically so assigned users can see them — do not ask the user to confirm publishing. Set publish: false only to save changes as a draft. Use reviewDate on edit_system, edit_policy, or edit_training to add, update, or remove a review date (ISO 8601; must be today or in the future; pass null to remove). Omit reviewDate to leave it unchanged. Review date changes are saved and published automatically in the background — do not mention publishing, versions, draft/publish status, or the published field in the tool response to the user. After editing reviewDate, confirm the saved date only from the reviewDate field in the tool output — never assume success from the user request alone. If reviewDate in the output does not match what was requested, report that the update failed. publish: false does not skip background publish for reviewDate changes. To mark overdue, set state: 2 (RED) separately.

ParameterTypeRequiredNotes
idstring (uuid)YesUUID of the training document to update
titlestringNoNew title
contentstringNoNew document content as raw HTML (e.g.

Title

). Pass real tags, not entity-escaped markup (<h2>). Fully entity-escaped content is auto-corrected; content mixing escaped markup with real tags is rejected with an error asking you to resend raw HTML.
descriptionstringNoNew HTML overview (not plain text). Accepts, stores, and renders HTML using the same editor rules as the document body.
notestringNoSupporting note as raw HTML (e.g.

Note

). Renders on the published document and public share links — do NOT put private context here. Pass real tags, not entity-escaped markup (<p>). Fully entity-escaped notes are auto-corrected; notes mixing escaped markup with real tags are rejected with an error asking you to resend raw HTML.
stateintegerNoDocument state: 0=GREY, 1=ORANGE, 2=RED, 3=GREEN, 4=PURPLE
reviewDatestring (date-time) or nullNoReview date in ISO 8601 format (e.g. “2030-01-15T00:00:00.000Z”) to add or update. Must be today or a future date. Pass null to remove the review date. Omit to leave unchanged.
ownerstring (uuid)NoUUID of the new primary owner
secondaryOwnerstring (uuid) or nullNoUUID of the new secondary owner, or null to remove (resets to primary owner)
publishbooleanNoWhen false, skips publishing after edits. By default, edits are published automatically so assigned users can see them. Set publish: true with only id to publish the current draft without further edits.
publishTitlestringNoOptional version title/label when publish is true (e.g. ‘v1.0 - Initial release’)

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the updated training document
titlestringCurrent title after update
typenumberItem type: 1=FOLDER, 2=DOCUMENT
statenumberDocument state: 0=GREY, 1=ORANGE, 2=RED, 3=GREEN, 4=PURPLE
reviewDatestring or nullISO timestamp of the next scheduled review, or null if not set
publishedbooleanBackground publish status (for agent verification only). Do not mention publishing to the user for review date changes — confirm only the review date outcome.
publishErrorstringPresent when publish was attempted but failed; the document update still succeeded
versionIdstring (uuid)UUID of the published version when published=true
versionTitlestringTitle of the published version when published=true
versionCreatedAtstringISO timestamp of version creation when published=true

edit_system_content

Performs surgical find-and-replace on a system document’s HTML content without requiring the agent to resupply the full body. Provide id and replacements: [{ find, replace }, …]. Replacements are literal (not regex) and applied sequentially. Errors if any find string is missing (never silently no-ops) or if expectMatches is set and the total match count differs. Prefer this over edit_system for small text/link fixes to save tokens and avoid HTML transcription errors. Edits are published automatically unless publish: false.

ParameterTypeRequiredNotes
idstring (uuid)YesUUID of the system document whose content to patch
replacementsarray of objectYesOrdered list of literal find/replace operations applied sequentially to document.content. Prefer this over edit_system when changing a small substring (links, phrases) so the full HTML body is not re-uploaded by the agent.
expectMatchesintegerNoOptional safety check: total number of matches across all replacements must equal this value, otherwise the tool errors and makes no changes. Omit to allow any positive match count.
publishbooleanNoWhen false, skips publishing after edits. By default, content edits are published automatically so assigned users can see them.
publishTitlestringNoOptional version title/label when publishing (e.g. ‘Fix CTA link’)

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the updated document
titlestringCurrent title after update
totalMatchesintegerTotal number of find-string matches replaced
replacementsarray of objectPer-replacement match counts Contains: find, replace, matchCount
publishedbooleanWhether a new version was published after the content patch
publishErrorstringPresent when publish was attempted but failed; the content update still succeeded
versionIdstring (uuid)UUID of the published version when published=true
versionTitlestringTitle of the published version when published=true
versionCreatedAtstringISO timestamp of version creation when published=true

edit_policy_content

Performs surgical find-and-replace on a policy document’s HTML content without requiring the agent to resupply the full body. Provide id and replacements: [{ find, replace }, …]. Replacements are literal (not regex) and applied sequentially. Errors if any find string is missing (never silently no-ops) or if expectMatches is set and the total match count differs. Prefer this over edit_policy for small text/link fixes to save tokens and avoid HTML transcription errors. Edits are published automatically unless publish: false.

ParameterTypeRequiredNotes
idstring (uuid)YesUUID of the policy document whose content to patch
replacementsarray of objectYesOrdered list of literal find/replace operations applied sequentially to document.content. Prefer this over edit_policy when changing a small substring (links, phrases) so the full HTML body is not re-uploaded by the agent.
expectMatchesintegerNoOptional safety check: total number of matches across all replacements must equal this value, otherwise the tool errors and makes no changes. Omit to allow any positive match count.
publishbooleanNoWhen false, skips publishing after edits. By default, content edits are published automatically so assigned users can see them.
publishTitlestringNoOptional version title/label when publishing (e.g. ‘Fix CTA link’)

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the updated document
titlestringCurrent title after update
totalMatchesintegerTotal number of find-string matches replaced
replacementsarray of objectPer-replacement match counts Contains: find, replace, matchCount
publishedbooleanWhether a new version was published after the content patch
publishErrorstringPresent when publish was attempted but failed; the content update still succeeded
versionIdstring (uuid)UUID of the published version when published=true
versionTitlestringTitle of the published version when published=true
versionCreatedAtstringISO timestamp of version creation when published=true

edit_training_content

Performs surgical find-and-replace on a training document’s HTML content without requiring the agent to resupply the full body. Provide id and replacements: [{ find, replace }, …]. Replacements are literal (not regex) and applied sequentially. Errors if any find string is missing (never silently no-ops) or if expectMatches is set and the total match count differs. Prefer this over edit_training for small text/link fixes to save tokens and avoid HTML transcription errors. Edits are published automatically unless publish: false.

ParameterTypeRequiredNotes
idstring (uuid)YesUUID of the training document whose content to patch
replacementsarray of objectYesOrdered list of literal find/replace operations applied sequentially to document.content. Prefer this over edit_training when changing a small substring (links, phrases) so the full HTML body is not re-uploaded by the agent.
expectMatchesintegerNoOptional safety check: total number of matches across all replacements must equal this value, otherwise the tool errors and makes no changes. Omit to allow any positive match count.
publishbooleanNoWhen false, skips publishing after edits. By default, content edits are published automatically so assigned users can see them.
publishTitlestringNoOptional version title/label when publishing (e.g. ‘Fix CTA link’)

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the updated document
titlestringCurrent title after update
totalMatchesintegerTotal number of find-string matches replaced
replacementsarray of objectPer-replacement match counts Contains: find, replace, matchCount
publishedbooleanWhether a new version was published after the content patch
publishErrorstringPresent when publish was attempted but failed; the content update still succeeded
versionIdstring (uuid)UUID of the published version when published=true
versionTitlestringTitle of the published version when published=true
versionCreatedAtstringISO timestamp of version creation when published=true

publish_system

Publishes the current state of a system document by creating an immutable version snapshot. This captures the document’s content, description, notes, tags, videos, templates, and attachments at this point in time. Assigned users will see the published version. Optionally provide a version title/label (e.g. ‘v2.1 - Updated compliance section’). Each publish creates a new version; previous versions are preserved.

⚠️ Correction — a version does not reliably restore everything listed above. The description says a snapshot captures content, description, notes, tags, videos, templates and attachments. In an independent test of the restore path (9 Aug 2026) restoring an earlier version reverted only the body content, leaving notes, tags, review date and comments as they were. We have not reproduced this ourselves and the discrepancy is open with the product team. Until it is settled, treat a version as a reliable record of the body and nothing more — in particular, do not treat publishing as a safety net before rewriting a document’s metadata.

ParameterTypeRequiredNotes
idstring (uuid)YesUUID of the system document to publish
titlestringNoOptional version title/label (e.g. ‘v2.1 - Updated compliance section’)

Returns

FieldTypeNotes
versionIdstring (uuid)UUID of the created version
titlestringVersion title
createdAtstringISO timestamp of version creation

publish_policy

Publishes the current state of a policy document by creating an immutable version snapshot. This captures the document’s content, description, notes, tags, videos, templates, and attachments at this point in time. Assigned users will see the published version. Optionally provide a version title/label (e.g. ‘v2.1 - Updated compliance section’). Each publish creates a new version; previous versions are preserved.

⚠️ Correction — a version does not reliably restore everything listed above. The description says a snapshot captures content, description, notes, tags, videos, templates and attachments. In an independent test of the restore path (9 Aug 2026) restoring an earlier version reverted only the body content, leaving notes, tags, review date and comments as they were. We have not reproduced this ourselves and the discrepancy is open with the product team. Until it is settled, treat a version as a reliable record of the body and nothing more — in particular, do not treat publishing as a safety net before rewriting a document’s metadata.

ParameterTypeRequiredNotes
idstring (uuid)YesUUID of the policy document to publish
titlestringNoOptional version title/label (e.g. ‘v2.1 - Updated compliance section’)

Returns

FieldTypeNotes
versionIdstring (uuid)UUID of the created version
titlestringVersion title
createdAtstringISO timestamp of version creation

publish_training

Publishes the current state of a training document by creating an immutable version snapshot. This captures the training’s content, description, notes, tags, videos, templates, and attachments at this point in time. Assigned users will see the published version. Optionally provide a version title/label (e.g. ‘v2.1 - Updated training content’). Each publish creates a new version; previous versions are preserved.

⚠️ Correction — a version does not reliably restore everything listed above. The description says a snapshot captures content, description, notes, tags, videos, templates and attachments. In an independent test of the restore path (9 Aug 2026) restoring an earlier version reverted only the body content, leaving notes, tags, review date and comments as they were. We have not reproduced this ourselves and the discrepancy is open with the product team. Until it is settled, treat a version as a reliable record of the body and nothing more — in particular, do not treat publishing as a safety net before rewriting a document’s metadata.

ParameterTypeRequiredNotes
idstring (uuid)YesUUID of the training document to publish
titlestringNoOptional version title/label (e.g. ‘v2.1 - Updated training content’)

Returns

FieldTypeNotes
versionIdstring (uuid)UUID of the created version
titlestringVersion title
createdAtstringISO timestamp of version creation

Version history

list_document_versions

Lists immutable published version snapshots for a system, policy, or training document, newest first. Each snapshot has a versionId, title, and createdAt. Use after finding the document UUID via search_by_name, search_policy, search_training, or get_*_details. Call this before restore_document_version to choose which snapshot to roll back to. Does not return version body content — restore to apply a snapshot to the live document. When presenting version history, list newest first. For each snapshot show title, createdAt, and versionId, and tell the user they must restore by versionId — never by date or timestamp. If the user names only a date, call list_document_versions, show matching rows with their versionIds, and ask which versionId to restore. Do not pick a snapshot from a date yourself. The latest row is the currently published snapshot assigned users see. Restore copies that snapshot onto the live document and publishes a new snapshot on top of history — then hard-refresh the document in SystemHub.

ParameterTypeRequiredNotes
documentIdstring (uuid)YesUUID of the system, policy, or training document. Find it via search_by_name, search_policy, search_training, or get_*_details.
pageintegerNoPage number when not using fetchAll (default 1)
limitintegerNoResults per page when not using fetchAll (default 50, max 100)
fetchAllbooleanNoWhen true (default), fetches version pages until complete (up to 500 snapshots) so the full history is available for restore.

Returns

FieldTypeNotes
documentIdstring (uuid)UUID of the document whose versions were listed
versionsarray of objectPublished snapshots, newest first. Empty when the document has never been published. Contains: versionId, title, createdAt, isLatest
latestVersionIdstring (uuid) or nullUUID of the newest published snapshot, or null when never published
summaryobjectCounts derived from the fetched versions Contains: totalVersions
hasMorebooleanTrue when pagination was used and more pages may exist — increase page or set fetchAll=true

restore_document_version

Restores a previous published snapshot onto the live system, policy, or training document. Requires documentId and versionId. Ask the user for the versionId (a UUID from list_document_versions) — do not restore from a date, timestamp, or title, and do not guess which snapshot matches a date. If the user only names a date, list versions, show each versionId, and wait for them to pick one. Restore copies that snapshot’s content, description, notes, tags, videos, templates, and attachments onto the live document. By default, publishes afterwards so the SystemHub UI (view mode) shows the rolled-back body — that creates a new snapshot on top of history; the restored versionId is unchanged. Set publish to false to restore the draft only. After restore, hard-refresh the document in the app.

ParameterTypeRequiredNotes
documentIdstring (uuid)YesUUID of the system, policy, or training document to restore. Find it via search_by_name, search_policy, search_training, or get_*_details.
versionIdstring (uuid)YesUUID of the published snapshot to restore. Required. Get it from list_document_versions (or get_details / publish). Never pass a date, timestamp, or version title — those are not versionId.
publishbooleanNoWhether to publish after restore so assigned users see the rolled-back content. Defaults to true. Set to false to restore the draft only. Default: true.
versionTitlestringNoOptional title for the new published snapshot after restore (e.g. ‘Restored v1.0’). Uses a timestamp if omitted. Ignored when publish is false.

Returns

FieldTypeNotes
documentIdstring (uuid)UUID of the document that was restored
restoredVersionIdstring (uuid)UUID of the historical snapshot that was applied to the live document
restoredVersionTitlestringTitle of the restored snapshot
restoredVersionCreatedAtstringISO timestamp when the restored snapshot was originally published
publishedobject or nullNew published snapshot created after restore so the UI/view mode shows the rolled-back content. This is a copy of the restored snapshot, not a replacement of history. Null when publish is false or publish failed.
publishErrorstringPresent when publish was requested but creating the new snapshot failed

Organising

move_system

Moves a system document into a different folder. Provide the document UUID and the destination folder UUID (use get_folder_tree to locate folders). The document keeps its title and content; only its location in the folder tree changes. Requires move permission on the document.

ParameterTypeRequiredNotes
idstring (uuid)YesUUID of the system document to move
parentstring (uuid)YesUUID of the destination folder (use get_folder_tree to find folder IDs)

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the moved document
titlestringTitle of the document
typenumberItem type: 2=DOCUMENT
parentstring (uuid) or nullUUID of the parent folder after the move

move_policy

Moves a policy document into a different folder. Provide the document UUID and the destination folder UUID (use get_policy_tree to locate folders). The document keeps its title and content; only its location in the folder tree changes. Requires move permission on the document.

ParameterTypeRequiredNotes
idstring (uuid)YesUUID of the policy document to move
parentstring (uuid)YesUUID of the destination folder (use get_policy_tree to find folder IDs)

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the moved document
titlestringTitle of the document
typenumberItem type: 2=DOCUMENT
parentstring (uuid) or nullUUID of the parent folder after the move

move_training

Moves a training document into a different folder. Provide the document UUID and the destination folder UUID (use get_training_tree to locate folders). The document keeps its title and content; only its location in the folder tree changes. Requires move permission on the document.

ParameterTypeRequiredNotes
idstring (uuid)YesUUID of the training document to move
parentstring (uuid)YesUUID of the destination folder (use get_training_tree to find folder IDs)

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the moved document
titlestringTitle of the document
typenumberItem type: 2=DOCUMENT
parentstring (uuid) or nullUUID of the parent folder after the move

rename_system_folder

Renames a folder or sub-folder in the Systems section of SystemHub. Provide the folder UUID (from get_folder_tree) and the new title. Works at any depth in the folder tree. Requires folder rename permission.

ParameterTypeRequiredNotes
idstring (uuid)YesUUID of the folder to rename (use get_folder_tree to find folder IDs; works for root folders and sub-folders)
titlestringYesNew folder name

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the renamed folder
titlestringUpdated folder name
typenumberItem type: 1=FOLDER
parentstring (uuid) or nullUUID of the parent folder, or null for root level

rename_policy_folder

Renames a folder or sub-folder in the Policies section of SystemHub. Provide the folder UUID (from get_policy_tree) and the new title. Works at any depth in the folder tree. Requires folder rename permission.

ParameterTypeRequiredNotes
idstring (uuid)YesUUID of the folder to rename (use get_policy_tree to find folder IDs; works for root folders and sub-folders)
titlestringYesNew folder name

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the renamed folder
titlestringUpdated folder name
typenumberItem type: 1=FOLDER
parentstring (uuid) or nullUUID of the parent folder, or null for root level

rename_training_folder

Renames a folder or sub-folder in the Training section of SystemHub. Provide the folder UUID (from get_training_tree) and the new title. Works at any depth in the folder tree. Requires folder rename permission.

ParameterTypeRequiredNotes
idstring (uuid)YesUUID of the folder to rename (use get_training_tree to find folder IDs; works for root folders and sub-folders)
titlestringYesNew folder name

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the renamed folder
titlestringUpdated folder name
typenumberItem type: 1=FOLDER
parentstring (uuid) or nullUUID of the parent folder, or null for root level

Templates, media, tags & comments

add_document_templates

Adds one or more document templates to a system, policy, or training document. Provide the document UUID (find it via search_policy, search_by_name, or search_training) and a list of templates. Each template requires title, subject, and details — ask the user for all three fields before calling this tool. Templates with a duplicate title on the same document are skipped. By default, publishes the document after adding templates so they are visible outside edit mode. Set publish to false to save to the draft only.

ParameterTypeRequiredNotes
documentIdstring (uuid)YesUUID of the document to update. Use search_policy, search_by_name, or search_training to find the document ID first.
templatesarray of objectYesTemplates to add. Each entry requires title, subject, and details. Example: [{ “title”: “Welcome Email”, “subject”: “Your login details”, “details”: “

Hi {{name}}, welcome!

” }]
publishbooleanNoWhether to publish the document after adding templates so they are visible outside edit mode. Defaults to true. Set to false to save to the draft only. Default: true.
versionTitlestringNoOptional version title when publish is true (e.g. ‘Updated templates’). Uses a timestamp if omitted.

Returns

FieldTypeNotes
documentIdstring (uuid)UUID of the updated document
addedarray of objectTemplates successfully added to the document Contains: id, title, subject, details
skippedarray of objectTemplates skipped because the title already exists Contains: title, reason
publishedobject or nullPublished version snapshot when publish is enabled; null when publish is false

edit_document_templates

Updates one or more existing document templates on a system, policy, or training document. Provide the document UUID (find it via search_policy, search_by_name, or search_training) and a list of edits. Each edit uses currentTitle to identify the template (case-insensitive) and at least one of title, subject, or details to change. Only provided fields are updated; omitted fields stay unchanged. Renaming to a title that already exists on the document is skipped. By default, publishes the document after editing so changes are visible outside edit mode. Set publish to false to update the draft only.

ParameterTypeRequiredNotes
documentIdstring (uuid)YesUUID of the document to update. Use search_policy, search_by_name, or search_training to find the document ID first.
templatesarray of objectYesTemplates to edit. Each entry requires currentTitle to identify the template, plus at least one of title, subject, or details to change. Example: [{ “currentTitle”: “Welcome Email”, “subject”: “Updated subject line” }]
publishbooleanNoWhether to publish the document after editing templates so changes are visible outside edit mode. Defaults to true. Set to false to update the draft only. Default: true.
versionTitlestringNoOptional version title when publish is true (e.g. ‘Updated templates’). Uses a timestamp if omitted.

Returns

FieldTypeNotes
documentIdstring (uuid)UUID of the updated document
updatedarray of objectTemplates successfully updated on the document Contains: id, title, subject, details
skippedarray of objectTemplate edits that were not applied (not found or title conflict) Contains: currentTitle, reason
publishedobject or nullPublished version snapshot when publish is enabled; null when publish is false

remove_document_templates

Removes one or more document templates from a system, policy, or training document by title. Provide the document UUID (find it via search_policy, search_by_name, or search_training) and a list of template titles to remove. Templates are matched by title (case-insensitive). By default, publishes the document after removing templates so changes are visible outside edit mode. Set publish to false to update the draft only. Returns which templates were removed and which titles were not found on the document.

ParameterTypeRequiredNotes
documentIdstring (uuid)YesUUID of the document to update. Use search_policy, search_by_name, or search_training to find the document ID first.
templatesarray of stringYesTemplate titles to remove from the document. Match by title (case-insensitive). Example: [“Welcome Email”, “Sign-off Notice”]
publishbooleanNoWhether to publish the document after removing templates so changes are visible outside edit mode. Defaults to true. Set to false to update the draft only. Default: true.
versionTitlestringNoOptional version title when publish is true (e.g. ‘Updated templates’). Uses a timestamp if omitted.

Returns

FieldTypeNotes
documentIdstring (uuid)UUID of the updated document
removedarray of objectTemplates successfully removed from the document Contains: id, title, subject, details
skippedarray of objectTemplate titles that were not on the document Contains: title, reason
publishedobject or nullPublished version snapshot when publish is enabled; null when publish is false

add_document_videos_and_media

Adds one or more Videos & Media entries (media link URLs — videos, etc.) to a system, policy, or training document. Provide the document UUID (find it via search_policy, search_by_name, or search_training) and a list of entries. Each entry requires videoLink; title is optional. Entries with a duplicate link on the same document are skipped. By default, publishes the document after adding so changes are visible outside edit mode. Set publish to false to save to the draft only.

ParameterTypeRequiredNotes
documentIdstring (uuid)YesUUID of the document to update. Use search_policy, search_by_name, or search_training to find the document ID first.
entriesarray of objectYesVideos & Media entries to add. Each entry requires videoLink (media URL); title is optional. Example: [{ “videoLink”: “https://www.loom.com/share/abc”, “title”: “Product walkthrough” }, { “videoLink”: “https://www.youtube.com/watch?v=abc123” }]
publishbooleanNoWhether to publish the document after adding videos so they are visible outside edit mode. Defaults to true. Set to false to save to the draft only. Default: true.
versionTitlestringNoOptional version title when publish is true (e.g. ‘Updated Videos & Media’). Uses a timestamp if omitted.

Returns

FieldTypeNotes
documentIdstring (uuid)UUID of the updated document
addedarray of objectVideos & Media entries successfully added to the document Contains: id, title, videoLink
skippedarray of objectEntries skipped because the link already exists on the document Contains: videoLink, reason
publishedobject or nullPublished version snapshot when publish is enabled; null when publish is false

remove_document_videos_and_media

Removes one or more Videos & Media entries (media link URLs — videos, etc.) from a system, policy, or training document. Provide the document UUID and identify entries by id (from videosAndMedia in get_details or search), title (case-insensitive), and/or videoLink (exact URL). By default, publishes the document after removal so changes are visible outside edit mode. Set publish to false to update the draft only. Returns which entries were removed and which were not found on the document.

ParameterTypeRequiredNotes
documentIdstring (uuid)YesUUID of the document to update. Use search_policy, search_by_name, or search_training to find the document ID first.
videoIdsarray of string (uuid)NoVideos & Media entry UUIDs to remove. Use the id from get_details or search videosAndMedia entries.
titlesarray of stringNoEntry titles to remove (case-insensitive). Use when the entry has a title set.
videoLinksarray of stringNoMedia link URLs to remove (exact match). Use when title is null or to target a specific link.
publishbooleanNoWhether to publish the document after removing entries so changes are visible outside edit mode. Defaults to true. Set to false to update the draft only. Default: true.
versionTitlestringNoOptional version title when publish is true (e.g. ‘Updated Videos & Media’). Uses a timestamp if omitted.

Returns

FieldTypeNotes
documentIdstring (uuid)UUID of the updated document
removedarray of objectVideos & Media entries successfully removed Contains: id, title, videoLink
skippedarray of objectVideos & Media entries that were not on the document Contains: id, title, videoLink, reason
publishedobject or nullPublished version snapshot when publish is enabled; null when publish is false

add_document_tags

Adds one or more tags to a system, policy, or training document by title. Provide the document UUID (find it via search_policy, search_by_name, or search_training) and a list of tag titles. Existing tags are matched by title and reused; unknown titles create new tags. Tags cannot be applied to folders. By default, publishes the document after adding tags so they are visible outside edit mode (same as publish_policy/publish_system/publish_training). Set publish to false to save tags to the draft only. Returns which tags were added, which were already present, and the published version when applicable.

ParameterTypeRequiredNotes
documentIdstring (uuid)YesUUID of the document to tag. Use search_policy, search_by_name, or search_training to find the document ID first.
tagsarray of stringYesTag titles to add. Existing tags with the same title are reused; new titles create tags automatically. Example: [“Model Context Protocol”, “Compliance”]
publishbooleanNoWhether to publish the document after adding tags so they are visible outside edit mode. Defaults to true. Set to false to save tags to the draft only. Default: true.
versionTitlestringNoOptional version title when publish is true (e.g. ‘Updated tags’). Uses a timestamp if omitted.

Returns

FieldTypeNotes
documentIdstring (uuid)UUID of the tagged document
addedarray of objectTags successfully added to the document Contains: id, title, createdAt, created
skippedarray of objectTags that were already on the document Contains: title, reason
publishedobject or nullPublished version snapshot when publish is enabled; null when publish is false

remove_document_tags

Removes one or more tags from a system, policy, or training document by title. Provide the document UUID (find it via search_policy, search_by_name, or search_training) and a list of tag titles to remove. This unlinks tags from the document only; the tag definitions remain available for other documents. By default, publishes the document after removing tags so changes are visible outside edit mode. Set publish to false to update the draft only. Returns which tags were removed and which were not on the document.

ParameterTypeRequiredNotes
documentIdstring (uuid)YesUUID of the document to update. Use search_policy, search_by_name, or search_training to find the document ID first.
tagsarray of stringYesTag titles to remove from the document. Example: [“Model Context Protocol”, “Compliance”]
publishbooleanNoWhether to publish the document after removing tags so changes are visible outside edit mode. Defaults to true. Set to false to update the draft only. Default: true.
versionTitlestringNoOptional version title when publish is true (e.g. ‘Updated tags’). Uses a timestamp if omitted.

Returns

FieldTypeNotes
documentIdstring (uuid)UUID of the updated document
removedarray of objectTags successfully removed from the document Contains: id, title, createdAt
skippedarray of objectTags that were not on the document Contains: title, reason
publishedobject or nullPublished version snapshot when publish is enabled; null when publish is false

add_document_attachments

Uploads file attachments to a system, policy, or training document (max 100MB per file, up to 10 files per call). Supported formats: PDF (.pdf); Microsoft Word (.doc, .docx, .docm); Excel (.xls, .xlsx, .xlsm); PowerPoint (.ppt, .pptx, .pptm); plain text (.txt, .csv, .rtf); Markdown (.md). Max 100MB per file. Images, MP3, and MP4 must be uploaded in the systemHUB app. When the user attaches files in chat (Add files), read each file and pass contentBase64 + fileName — chat attachments are not sent to this tool automatically. Alternatively use fileUrl for a public download URL. Uploads are published automatically.

ParameterTypeRequiredNotes
documentIdstring (uuid)YesUUID of the document to update. Use search_policy, search_by_name, or search_training to find the document ID first.
parentFolderIdstring (uuid)NoDefault attachment folder UUID for all files. Per-file parentFolderId overrides this. Omit to upload to the document root.
filesarray of objectYesFiles to upload (1–10, max 100MB each). Supported: PDF (.pdf); Microsoft Word (.doc, .docx, .docm); Excel (.xls, .xlsx, .xlsm); PowerPoint (.ppt, .pptx, .pptm); plain text (.txt, .csv, .rtf); Markdown (.md). Max 100MB per file. Images, MP3, and MP4 must be uploaded in the systemHUB app. Each entry needs contentBase64+fileName OR fileUrl. When the user attaches files via chat (Add files), read each attached file and pass its base64 content here.
publishbooleanNoWhen false, skips publishing after upload. By default, uploads are published automatically so attachments are visible outside edit mode. Do not set publish: false unless saving to draft only.
versionTitlestringNoOptional version title when publish is true (e.g. ‘Updated attachments’). Uses a timestamp if omitted.

Returns

FieldTypeNotes
documentIdstring (uuid)UUID of the updated document
addedarray of objectFiles successfully uploaded to the document Contains: id, title, type, downloadUrl
skippedarray of objectFiles that were not uploaded Contains: fileName, reason, detail
publishedobject or nullPublished version snapshot when publish is enabled; null when publish is false

add_document_comment

Posts a new comment or reply on a system, policy, or training document. Provide the document UUID (find it via search_policy, search_by_name, or search_training) and the comment text. To reply to an existing thread, set parentCommentId to the parent comment UUID (find comment IDs in get_system_details, get_policy_details, or get_training_details). Optionally quote a document excerpt with matching topicType, or @-mention users via mentions (renders @-tags in the comment and sends mention notifications; unknown user IDs error). Notifications are also sent for new comments and replies. Retrying the same payload after a timeout returns the original comment instead of posting a duplicate.

ParameterTypeRequiredNotes
documentIdstring (uuid)YesUUID of the document to comment on. Use search_policy, search_by_name, or search_training to find the document ID first.
textstringYesComment body text
parentCommentIdstring (uuid)NoUUID of the parent comment when replying to an existing thread. Omit for a new root comment. Use get_system_details, get_policy_details, or get_training_details to find comment IDs in the comments array.
quotestringNoQuoted excerpt from the document when commenting on a selected passage. Requires topicType.
topicTypeenum: description · content · noteNoSource of quoted text: “description” (Overview), “content” (Details), or “note” (Notes). Required when quote is provided.
mentionsarray of string (uuid)NoOptional user UUIDs to @-mention and notify. Prefer this array as the source of truth — do not also type literal “@Full Name” in text for the same people (the server upgrades those in place, but the array alone is enough). Use get_document_members_and_roles or list_company_members for IDs. Mentions do not require document membership. Unknown user IDs return an error.

Returns

FieldTypeNotes
documentIdstring (uuid)UUID of the document that was commented on
commentobjectThe created comment Contains: id, parentId, createdAt, author, text, quote, topicType, mentions

Learning tracks

create_training_learning_track

Adds a learning track entry to a training document. A learning track links a specific base item as a required step in the training curriculum — always link a document (type=2), not a folder, so users can complete it and have their progress counted. Provide the training UUID, the base item UUID to link, and optionally a title and estimated completion time. Sort order is assigned automatically. Call publish_training after adding all entries to make the curriculum visible to assigned users.

ParameterTypeRequiredNotes
trainingIdstring (uuid)YesUUID of the training document to add the learning track to
baseItemstring (uuid)YesUUID of the base item to link as a curriculum step. Must be a document (type=2) — do not use a folder UUID, as users cannot complete a folder and their progress will not advance for that step.
titlestringNoOptional title for the learning track entry; defaults to the base item title
estimatedTimestringNoEstimated time to complete (e.g. “15 min”, “1 hour”)

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the created learning track
trainingstring (uuid)UUID of the parent training
baseItemstring (uuid)UUID of the linked base item
titlestringTitle of the learning track entry
estimatedTimestring or nullEstimated completion time
createdAtstringISO timestamp of creation

edit_training_learning_track

Updates an existing learning track entry’s fields. Provide the training UUID, the learning track UUID, and any combination of fields to update: title, estimatedTime, or baseItem (UUID of the linked item). Only provided fields are changed; omitted fields remain untouched.

ParameterTypeRequiredNotes
trainingIdstring (uuid)YesUUID of the parent training document
learningIdstring (uuid)YesUUID of the learning track entry to update
titlestringNoNew title for the learning track entry
estimatedTimestringNoNew estimated completion time (e.g. “15 min”, “1 hour”)
baseItemstring (uuid)NoUUID of a different base item to link

Returns

FieldTypeNotes
idstring (uuid)Unique identifier of the updated learning track
trainingstring (uuid)UUID of the parent training
baseItemstring (uuid)UUID of the linked base item
titlestringTitle of the learning track entry
estimatedTimestring or nullEstimated completion time
createdAtstringISO timestamp of creation

remove_training_learning_tracks

Removes one or more learning track curriculum steps from a training document. Provide the training UUID (find it via search_training or get_training_details) and identify steps by learningTrackIds (from learningTracks), titles (case-insensitive), and/or baseItems (linked document UUIDs). By default, publishes the training after removal so changes are visible outside edit mode. Set publish to false to update the draft only. Returns which steps were removed and which were not found.

ParameterTypeRequiredNotes
trainingIdstring (uuid)YesUUID of the training document. Use search_training or get_training_details to find the training ID first.
learningTrackIdsarray of string (uuid)NoLearning track entry UUIDs to remove. Use id from learningTracks in get_training_details or search_training.
titlesarray of stringNoCurriculum step titles to remove (case-insensitive).
baseItemsarray of string (uuid)NoLinked document UUIDs to remove (matches learning track baseItem).
publishbooleanNoWhether to publish the training after removing steps so changes are visible outside edit mode. Defaults to true. Set to false to update the draft only. Default: true.
versionTitlestringNoOptional version title when publish is true (e.g. ‘Updated learning track’). Uses a timestamp if omitted.

Returns

FieldTypeNotes
trainingIdstring (uuid)UUID of the updated training document
removedarray of objectLearning track steps successfully removed Contains: id, baseItem, title, estimatedTime, discriminator, sortOrder, createdAt
skippedarray of objectLearning track steps that were not found on this training Contains: id, title, baseItem, reason
publishedobject or nullPublished version snapshot when publish is enabled; null when publish is false

Generated from the MCP schema snapshot. Refresh: re-dump data/mcp-schemas.json from the live connector, then run python3 scripts/generate_tool_reference.py. In the production pipeline this runs on every deploy.