castor-mcp 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +77 -0
- package/build/api-catalog.d.ts +27 -0
- package/build/api-catalog.js +76 -0
- package/build/api-catalog.js.map +1 -0
- package/build/confluence-client.d.ts +33 -0
- package/build/confluence-client.js +65 -0
- package/build/confluence-client.js.map +1 -0
- package/build/index.d.ts +2 -0
- package/build/index.js +137 -0
- package/build/index.js.map +1 -0
- package/build/resource-definitions.d.ts +10 -0
- package/build/resource-definitions.js +75 -0
- package/build/resource-definitions.js.map +1 -0
- package/build/tool-definitions.d.ts +19 -0
- package/build/tool-definitions.js +1811 -0
- package/build/tool-definitions.js.map +1 -0
- package/build/tools/admin-users-groups.d.ts +114 -0
- package/build/tools/admin-users-groups.js +150 -0
- package/build/tools/admin-users-groups.js.map +1 -0
- package/build/tools/admin.d.ts +12 -0
- package/build/tools/admin.js +30 -0
- package/build/tools/admin.js.map +1 -0
- package/build/tools/args.d.ts +2 -0
- package/build/tools/args.js +12 -0
- package/build/tools/args.js.map +1 -0
- package/build/tools/attachments.d.ts +138 -0
- package/build/tools/attachments.js +170 -0
- package/build/tools/attachments.js.map +1 -0
- package/build/tools/backup-restore.d.ts +144 -0
- package/build/tools/backup-restore.js +223 -0
- package/build/tools/backup-restore.js.map +1 -0
- package/build/tools/bulk-pages.d.ts +103 -0
- package/build/tools/bulk-pages.js +111 -0
- package/build/tools/bulk-pages.js.map +1 -0
- package/build/tools/color-schemes.d.ts +72 -0
- package/build/tools/color-schemes.js +121 -0
- package/build/tools/color-schemes.js.map +1 -0
- package/build/tools/content-structure.d.ts +164 -0
- package/build/tools/content-structure.js +220 -0
- package/build/tools/content-structure.js.map +1 -0
- package/build/tools/content.d.ts +194 -0
- package/build/tools/content.js +246 -0
- package/build/tools/content.js.map +1 -0
- package/build/tools/errors.d.ts +3 -0
- package/build/tools/errors.js +55 -0
- package/build/tools/errors.js.map +1 -0
- package/build/tools/index-management.d.ts +30 -0
- package/build/tools/index-management.js +64 -0
- package/build/tools/index-management.js.map +1 -0
- package/build/tools/labels.d.ts +108 -0
- package/build/tools/labels.js +160 -0
- package/build/tools/labels.js.map +1 -0
- package/build/tools/permissions.d.ts +554 -0
- package/build/tools/permissions.js +194 -0
- package/build/tools/permissions.js.map +1 -0
- package/build/tools/spaces-admin.d.ts +225 -0
- package/build/tools/spaces-admin.js +288 -0
- package/build/tools/spaces-admin.js.map +1 -0
- package/build/tools/spaces-pages.d.ts +103 -0
- package/build/tools/spaces-pages.js +150 -0
- package/build/tools/spaces-pages.js.map +1 -0
- package/build/tools/system.d.ts +42 -0
- package/build/tools/system.js +101 -0
- package/build/tools/system.js.map +1 -0
- package/build/tools/users-groups.d.ts +216 -0
- package/build/tools/users-groups.js +274 -0
- package/build/tools/users-groups.js.map +1 -0
- package/build/tools/webhooks.d.ts +105 -0
- package/build/tools/webhooks.js +124 -0
- package/build/tools/webhooks.js.map +1 -0
- package/build/version.d.ts +7 -0
- package/build/version.js +17 -0
- package/build/version.js.map +1 -0
- package/docs/api-catalog.yaml +2388 -0
- package/package.json +59 -0
- package/skills/content.md +85 -0
- package/skills/instance-maintenance.md +59 -0
- package/skills/permissions.md +47 -0
- package/skills/spaces-admin.md +59 -0
- package/skills/spaces-pages.md +24 -0
- package/skills/system.md +34 -0
- package/skills/users-groups.md +55 -0
- package/skills/webhooks.md +25 -0
|
@@ -0,0 +1,1811 @@
|
|
|
1
|
+
import { parseArgs } from "./tools/args.js";
|
|
2
|
+
import { listSpaces, ListSpacesArgsSchema, getSpace, GetSpaceArgsSchema, getPage, GetPageArgsSchema, createPage, CreatePageArgsSchema, updatePage, UpdatePageArgsSchema, searchContent, SearchContentArgsSchema, } from "./tools/spaces-pages.js";
|
|
3
|
+
import { UNTRUSTED_CONTENT_NOTE } from "./tools/spaces-pages.js";
|
|
4
|
+
import { adminGetSpacePermissions, AdminGetSpacePermissionsArgsSchema } from "./tools/admin.js";
|
|
5
|
+
import { listContent, ListContentArgsSchema, deletePage, DeletePageArgsSchema, getPageHistory, GetPageHistoryArgsSchema, getPageMacroBodyByHash, GetPageMacroBodyByHashArgsSchema, getPageMacroBodyById, GetPageMacroBodyByIdArgsSchema, listPageProperties, ListPagePropertiesArgsSchema, getPageProperty, GetPagePropertyArgsSchema, createPageProperty, CreatePagePropertyArgsSchema, updatePageProperty, UpdatePagePropertyArgsSchema, deletePageProperty, DeletePagePropertyArgsSchema, deletePageVersion, DeletePageVersionArgsSchema, scanContent, ScanContentArgsSchema, convertContentBody, ConvertContentBodyArgsSchema, } from "./tools/content.js";
|
|
6
|
+
import { getPageWatchers, GetPageWatchersArgsSchema, listPageChildren, ListPageChildrenArgsSchema, listPageChildrenOfType, ListPageChildrenOfTypeArgsSchema, listPageComments, ListPageCommentsArgsSchema, listPageDescendants, ListPageDescendantsArgsSchema, listPageDescendantsOfType, ListPageDescendantsOfTypeArgsSchema, countDescendantPages, CountDescendantPagesArgsSchema, updatePageRestrictions, UpdatePageRestrictionsArgsSchema, getPageRestrictionsByOperation, GetPageRestrictionsByOperationArgsSchema, getPageRestrictionsForOperation, GetPageRestrictionsForOperationArgsSchema, getPageRelevantViewRestrictions, GetPageRelevantViewRestrictionsArgsSchema, publishLegacyBlueprintDraft, PublishLegacyBlueprintDraftArgsSchema, publishSharedBlueprintDraft, PublishSharedBlueprintDraftArgsSchema, } from "./tools/content-structure.js";
|
|
7
|
+
import { listPageLabels, ListPageLabelsArgsSchema, addPageLabels, AddPageLabelsArgsSchema, deletePageLabel, DeletePageLabelArgsSchema, getRelatedLabels, GetRelatedLabelsArgsSchema, searchLabels, SearchLabelsArgsSchema, getPopularLabels, GetPopularLabelsArgsSchema, getRecentLabels, GetRecentLabelsArgsSchema, listSpaceLabels, ListSpaceLabelsArgsSchema, getSpaceRelatedLabels, GetSpaceRelatedLabelsArgsSchema, getSpacePopularLabels, GetSpacePopularLabelsArgsSchema, getSpaceRecentLabels, GetSpaceRecentLabelsArgsSchema, } from "./tools/labels.js";
|
|
8
|
+
import { getBulkPageChildren, GetBulkPageChildrenArgsSchema, bulkDeletePages, BulkDeletePagesArgsSchema, getDeletableDescendantCounts, GetDeletableDescendantCountsArgsSchema, getBulkDeleteLimits, GetBulkDeleteLimitsArgsSchema, previewBulkDelete, PreviewBulkDeleteArgsSchema, getSpaceRootPages, GetSpaceRootPagesArgsSchema, } from "./tools/bulk-pages.js";
|
|
9
|
+
import { listPageAttachments, ListPageAttachmentsArgsSchema, createAttachment, CreateAttachmentArgsSchema, deleteAttachment, DeleteAttachmentArgsSchema, updateAttachmentMetadata, UpdateAttachmentMetadataArgsSchema, updateAttachmentData, UpdateAttachmentDataArgsSchema, getAttachmentExtractedText, GetAttachmentExtractedTextArgsSchema, moveAttachment, MoveAttachmentArgsSchema, deleteAttachmentVersion, DeleteAttachmentVersionArgsSchema, } from "./tools/attachments.js";
|
|
10
|
+
import { createSpace, CreateSpaceArgsSchema, createPrivateSpace, CreatePrivateSpaceArgsSchema, createPersonalSpace, CreatePersonalSpaceArgsSchema, deleteSpace, DeleteSpaceArgsSchema, updateSpace, UpdateSpaceArgsSchema, archiveSpace, ArchiveSpaceArgsSchema, addSpaceCategory, AddSpaceCategoryArgsSchema, removeSpaceCategory, RemoveSpaceCategoryArgsSchema, listSpaceContent, ListSpaceContentArgsSchema, listSpaceContentOfType, ListSpaceContentOfTypeArgsSchema, listSpaceProperties, ListSpacePropertiesArgsSchema, createSpaceProperty, CreateSpacePropertyArgsSchema, getSpaceProperty, GetSpacePropertyArgsSchema, updateSpaceProperty, UpdateSpacePropertyArgsSchema, deleteSpaceProperty, DeleteSpacePropertyArgsSchema, restoreSpace, RestoreSpaceArgsSchema, emptySpaceTrash, EmptySpaceTrashArgsSchema, listSpaceTrash, ListSpaceTrashArgsSchema, getSpaceWatchers, GetSpaceWatchersArgsSchema, } from "./tools/spaces-admin.js";
|
|
11
|
+
import { listGlobalPermissions, ListGlobalPermissionsArgsSchema, setGlobalPermissions, SetGlobalPermissionsArgsSchema, getAnonymousGlobalPermissions, GetAnonymousGlobalPermissionsArgsSchema, grantAnonymousGlobalPermissions, GrantAnonymousGlobalPermissionsArgsSchema, revokeAnonymousGlobalPermissions, RevokeAnonymousGlobalPermissionsArgsSchema, getGroupGlobalPermissions, GetGroupGlobalPermissionsArgsSchema, grantGroupGlobalPermissions, GrantGroupGlobalPermissionsArgsSchema, revokeGroupGlobalPermissions, RevokeGroupGlobalPermissionsArgsSchema, getUnlicensedGlobalPermissions, GetUnlicensedGlobalPermissionsArgsSchema, grantUnlicensedGlobalPermissions, GrantUnlicensedGlobalPermissionsArgsSchema, revokeUnlicensedGlobalPermissions, RevokeUnlicensedGlobalPermissionsArgsSchema, getUserGlobalPermissions, GetUserGlobalPermissionsArgsSchema, grantUserGlobalPermissions, GrantUserGlobalPermissionsArgsSchema, revokeUserGlobalPermissions, RevokeUserGlobalPermissionsArgsSchema, setSpacePermissions, SetSpacePermissionsArgsSchema, getSpaceAnonymousPermissions, GetSpaceAnonymousPermissionsArgsSchema, grantSpaceAnonymousPermissions, GrantSpaceAnonymousPermissionsArgsSchema, revokeSpaceAnonymousPermissions, RevokeSpaceAnonymousPermissionsArgsSchema, getSpaceGroupPermissions, GetSpaceGroupPermissionsArgsSchema, grantSpaceGroupPermissions, GrantSpaceGroupPermissionsArgsSchema, revokeSpaceGroupPermissions, RevokeSpaceGroupPermissionsArgsSchema, getSpaceUserPermissions, GetSpaceUserPermissionsArgsSchema, grantSpaceUserPermissions, GrantSpaceUserPermissionsArgsSchema, revokeSpaceUserPermissions, RevokeSpaceUserPermissionsArgsSchema, } from "./tools/permissions.js";
|
|
12
|
+
import { getGlobalColorScheme, GetGlobalColorSchemeArgsSchema, updateGlobalColorScheme, UpdateGlobalColorSchemeArgsSchema, getDefaultGlobalColorScheme, GetDefaultGlobalColorSchemeArgsSchema, resetGlobalColorScheme, ResetGlobalColorSchemeArgsSchema, getSpaceColorScheme, GetSpaceColorSchemeArgsSchema, updateSpaceColorScheme, UpdateSpaceColorSchemeArgsSchema, resetSpaceColorScheme, ResetSpaceColorSchemeArgsSchema, getSpaceColorSchemeType, GetSpaceColorSchemeTypeArgsSchema, updateSpaceColorSchemeType, UpdateSpaceColorSchemeTypeArgsSchema, } from "./tools/color-schemes.js";
|
|
13
|
+
import { getAccessMode, GetAccessModeArgsSchema, listGroups, ListGroupsArgsSchema, getGroup, GetGroupArgsSchema, getGroupAncestors, GetGroupAncestorsArgsSchema, getGroupNestedMembers, GetGroupNestedMembersArgsSchema, getGroupParents, GetGroupParentsArgsSchema, getGroupMembers, GetGroupMembersArgsSchema, getUser, GetUserArgsSchema, addUserToGroup, AddUserToGroupArgsSchema, removeUserFromGroup, RemoveUserFromGroupArgsSchema, getAnonymousUserInfo, GetAnonymousUserInfoArgsSchema, getCurrentUser, GetCurrentUserArgsSchema, updateCurrentUser, UpdateCurrentUserArgsSchema, changeCurrentUserPassword, ChangeCurrentUserPasswordArgsSchema, listUsers, ListUsersArgsSchema, getUserGroups, GetUserGroupsArgsSchema, updateUserSettings, UpdateUserSettingsArgsSchema, removeContentWatcher, RemoveContentWatcherArgsSchema, isWatchingContent, IsWatchingContentArgsSchema, addContentWatcher, AddContentWatcherArgsSchema, removeSpaceWatcher, RemoveSpaceWatcherArgsSchema, isWatchingSpace, IsWatchingSpaceArgsSchema, addSpaceWatcher, AddSpaceWatcherArgsSchema, } from "./tools/users-groups.js";
|
|
14
|
+
import { adminCreateGroup, AdminCreateGroupArgsSchema, adminDeleteGroup, AdminDeleteGroupArgsSchema, adminCreatePersonalSpaceForUser, AdminCreatePersonalSpaceForUserArgsSchema, adminCreateUser, AdminCreateUserArgsSchema, adminDeleteUser, AdminDeleteUserArgsSchema, adminUpdateUser, AdminUpdateUserArgsSchema, adminDisableUser, AdminDisableUserArgsSchema, adminEnableUser, AdminEnableUserArgsSchema, adminChangeUserPassword, AdminChangeUserPasswordArgsSchema, adminListActiveUsers, AdminListActiveUsersArgsSchema, } from "./tools/admin-users-groups.js";
|
|
15
|
+
import { adminListWebhooks, AdminListWebhooksArgsSchema, adminCreateWebhook, AdminCreateWebhookArgsSchema, adminDeleteWebhook, AdminDeleteWebhookArgsSchema, adminGetWebhook, AdminGetWebhookArgsSchema, adminUpdateWebhook, AdminUpdateWebhookArgsSchema, adminGetWebhookLatestInvocations, AdminGetWebhookLatestInvocationsArgsSchema, adminGetWebhookStatistics, AdminGetWebhookStatisticsArgsSchema, adminGetWebhookStatisticsSummary, AdminGetWebhookStatisticsSummaryArgsSchema, adminTestWebhook, AdminTestWebhookArgsSchema, } from "./tools/webhooks.js";
|
|
16
|
+
import { adminCreateSiteBackupJob, AdminCreateSiteBackupJobArgsSchema, adminCreateSpaceBackupJob, AdminCreateSpaceBackupJobArgsSchema, adminFindBackupRestoreJobs, AdminFindBackupRestoreJobsArgsSchema, adminGetBackupRestoreJob, AdminGetBackupRestoreJobArgsSchema, adminCancelBackupRestoreJob, AdminCancelBackupRestoreJobArgsSchema, adminDownloadBackupFile, AdminDownloadBackupFileArgsSchema, adminCancelAllQueuedBackupRestoreJobs, AdminCancelAllQueuedBackupRestoreJobsArgsSchema, adminListRestoreFiles, AdminListRestoreFilesArgsSchema, adminCreateSiteRestoreJob, AdminCreateSiteRestoreJobArgsSchema, adminCreateSpaceRestoreJob, AdminCreateSpaceRestoreJobArgsSchema, adminCreateSiteRestoreJobFromUpload, AdminCreateSiteRestoreJobFromUploadArgsSchema, adminCreateSpaceRestoreJobFromUpload, AdminCreateSpaceRestoreJobFromUploadArgsSchema, } from "./tools/backup-restore.js";
|
|
17
|
+
import { getReindexStatus, GetReindexStatusArgsSchema, triggerReindex, TriggerReindexArgsSchema, resetReindexJob, ResetReindexJobArgsSchema, unindexAllContent, UnindexAllContentArgsSchema, } from "./tools/index-management.js";
|
|
18
|
+
import { adminGetAuditRecords, AdminGetAuditRecordsArgsSchema, adminGetClusterNodeStatuses, AdminGetClusterNodeStatusesArgsSchema, getInstanceMetrics, GetInstanceMetricsArgsSchema, adminListLongTasks, AdminListLongTasksArgsSchema, adminGetLongTask, AdminGetLongTaskArgsSchema, searchEntities, SearchEntitiesArgsSchema, getServerInformation, GetServerInformationArgsSchema, } from "./tools/system.js";
|
|
19
|
+
export const TOOL_DEFINITIONS = {
|
|
20
|
+
list_spaces: {
|
|
21
|
+
description: "List Confluence spaces, optionally filtered by type (global or personal).",
|
|
22
|
+
inputSchema: {
|
|
23
|
+
type: "object",
|
|
24
|
+
properties: {
|
|
25
|
+
type: { type: "string", enum: ["global", "personal"], description: "Filter by space type." },
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
handler: (server, args) => listSpaces(server.requireUserClient(), parseArgs(ListSpacesArgsSchema, args ?? {})),
|
|
29
|
+
},
|
|
30
|
+
get_space: {
|
|
31
|
+
description: "Get a single Confluence space by key.",
|
|
32
|
+
inputSchema: {
|
|
33
|
+
type: "object",
|
|
34
|
+
properties: { spaceKey: { type: "string", description: 'Space key, e.g. "TEST".' } },
|
|
35
|
+
required: ["spaceKey"],
|
|
36
|
+
},
|
|
37
|
+
handler: (server, args) => getSpace(server.requireUserClient(), parseArgs(GetSpaceArgsSchema, args)),
|
|
38
|
+
},
|
|
39
|
+
get_page: {
|
|
40
|
+
description: "Get a single Confluence page by ID, including its body (storage format HTML) and current " +
|
|
41
|
+
"version number. See skill://spaces-pages for CQL/versioning guidance." + UNTRUSTED_CONTENT_NOTE,
|
|
42
|
+
inputSchema: {
|
|
43
|
+
type: "object",
|
|
44
|
+
properties: { pageId: { type: "string", description: "Content/page ID." } },
|
|
45
|
+
required: ["pageId"],
|
|
46
|
+
},
|
|
47
|
+
handler: (server, args) => getPage(server.requireUserClient(), parseArgs(GetPageArgsSchema, args)),
|
|
48
|
+
},
|
|
49
|
+
create_page: {
|
|
50
|
+
description: "Create a new Confluence page in a space. Body must be storage-format HTML.",
|
|
51
|
+
inputSchema: {
|
|
52
|
+
type: "object",
|
|
53
|
+
properties: {
|
|
54
|
+
spaceKey: { type: "string" },
|
|
55
|
+
title: { type: "string" },
|
|
56
|
+
body: { type: "string", description: "Storage-format HTML, e.g. \"<p>Hello</p>\"." },
|
|
57
|
+
},
|
|
58
|
+
required: ["spaceKey", "title", "body"],
|
|
59
|
+
},
|
|
60
|
+
handler: (server, args) => createPage(server.requireUserClient(), parseArgs(CreatePageArgsSchema, args)),
|
|
61
|
+
},
|
|
62
|
+
update_page: {
|
|
63
|
+
description: "Update a Confluence page's title and body. Call get_page first to obtain currentVersion — " +
|
|
64
|
+
"this tool replaces the full page content, and a stale version fails with 409. " +
|
|
65
|
+
"See skill://spaces-pages.",
|
|
66
|
+
inputSchema: {
|
|
67
|
+
type: "object",
|
|
68
|
+
properties: {
|
|
69
|
+
pageId: { type: "string" },
|
|
70
|
+
currentVersion: { type: "number", description: "From get_page's version field." },
|
|
71
|
+
title: { type: "string" },
|
|
72
|
+
body: { type: "string", description: "Full replacement storage-format HTML." },
|
|
73
|
+
},
|
|
74
|
+
required: ["pageId", "currentVersion", "title", "body"],
|
|
75
|
+
},
|
|
76
|
+
handler: (server, args) => updatePage(server.requireUserClient(), parseArgs(UpdatePageArgsSchema, args)),
|
|
77
|
+
},
|
|
78
|
+
search_content: {
|
|
79
|
+
description: "Search Confluence content using CQL (preferred over any other search mechanism). " +
|
|
80
|
+
"See skill://spaces-pages for CQL syntax." + UNTRUSTED_CONTENT_NOTE,
|
|
81
|
+
inputSchema: {
|
|
82
|
+
type: "object",
|
|
83
|
+
properties: {
|
|
84
|
+
cql: { type: "string" },
|
|
85
|
+
limit: { type: "number", description: "Max results (default 25, capped at 100)." },
|
|
86
|
+
},
|
|
87
|
+
required: ["cql"],
|
|
88
|
+
},
|
|
89
|
+
handler: (server, args) => searchContent(server.requireUserClient(), parseArgs(SearchContentArgsSchema, args)),
|
|
90
|
+
},
|
|
91
|
+
admin_get_space_permissions: {
|
|
92
|
+
description: "Get all permission grants (user/group/anonymous) on a Confluence space. Requires space-admin " +
|
|
93
|
+
"permission. Only registered when CONFLUENCE_ADMIN_TOKEN is configured.",
|
|
94
|
+
inputSchema: {
|
|
95
|
+
type: "object",
|
|
96
|
+
properties: { spaceKey: { type: "string" } },
|
|
97
|
+
required: ["spaceKey"],
|
|
98
|
+
},
|
|
99
|
+
requiresAdmin: true,
|
|
100
|
+
handler: (server, args) => adminGetSpacePermissions(server.requireAdminClient(), parseArgs(AdminGetSpacePermissionsArgsSchema, args)),
|
|
101
|
+
},
|
|
102
|
+
list_content: {
|
|
103
|
+
description: "List Confluence content (pages, blog posts, etc.) with optional filters. Broader than " +
|
|
104
|
+
"search_content (no CQL) and list_spaces (any content type, not just spaces). " +
|
|
105
|
+
"See skill://content for real gotchas across this tool surface.",
|
|
106
|
+
inputSchema: {
|
|
107
|
+
type: "object",
|
|
108
|
+
properties: {
|
|
109
|
+
spaceKey: { type: "string" },
|
|
110
|
+
type: { type: "string", description: 'e.g. "page", "blogpost".' },
|
|
111
|
+
title: { type: "string" },
|
|
112
|
+
status: { type: "string", description: 'e.g. "current", "trashed", "draft".' },
|
|
113
|
+
limit: { type: "number" },
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
handler: (server, args) => listContent(server.requireUserClient(), parseArgs(ListContentArgsSchema, args ?? {})),
|
|
117
|
+
},
|
|
118
|
+
delete_page: {
|
|
119
|
+
description: "Delete a Confluence page. Omit status to trash a current page; to permanently purge an " +
|
|
120
|
+
"already-trashed page, pass status=\"trashed\" (matching its current status — confirmed " +
|
|
121
|
+
"live, passing \"current\" here does nothing, it just re-trashes an already-trashed page).",
|
|
122
|
+
inputSchema: {
|
|
123
|
+
type: "object",
|
|
124
|
+
properties: { pageId: { type: "string" }, status: { type: "string" } },
|
|
125
|
+
required: ["pageId"],
|
|
126
|
+
},
|
|
127
|
+
handler: (server, args) => deletePage(server.requireUserClient(), parseArgs(DeletePageArgsSchema, args)),
|
|
128
|
+
},
|
|
129
|
+
get_page_history: {
|
|
130
|
+
description: "Get a page's history metadata (created/last-updated by and when).",
|
|
131
|
+
inputSchema: {
|
|
132
|
+
type: "object",
|
|
133
|
+
properties: { pageId: { type: "string" } },
|
|
134
|
+
required: ["pageId"],
|
|
135
|
+
},
|
|
136
|
+
handler: (server, args) => getPageHistory(server.requireUserClient(), parseArgs(GetPageHistoryArgsSchema, args)),
|
|
137
|
+
},
|
|
138
|
+
get_page_macro_body_by_hash: {
|
|
139
|
+
description: "Get a macro's rendered body by hash, for a specific page version. Deprecated by Atlassian " +
|
|
140
|
+
"in favor of get_page_macro_body_by_id — but confirmed live that this endpoint also accepts " +
|
|
141
|
+
"a real macroId as the hash value, so get_page_macro_body_by_id is the simpler choice " +
|
|
142
|
+
"(macroId is a real attribute on the page's storage-format body, not a separately-computed " +
|
|
143
|
+
"hash)." + UNTRUSTED_CONTENT_NOTE,
|
|
144
|
+
inputSchema: {
|
|
145
|
+
type: "object",
|
|
146
|
+
properties: {
|
|
147
|
+
pageId: { type: "string" },
|
|
148
|
+
version: { type: "number" },
|
|
149
|
+
hash: { type: "string" },
|
|
150
|
+
},
|
|
151
|
+
required: ["pageId", "version", "hash"],
|
|
152
|
+
},
|
|
153
|
+
handler: (server, args) => getPageMacroBodyByHash(server.requireUserClient(), parseArgs(GetPageMacroBodyByHashArgsSchema, args)),
|
|
154
|
+
},
|
|
155
|
+
get_page_macro_body_by_id: {
|
|
156
|
+
description: "Get a macro's rendered body by its macro ID, for a specific page version." + UNTRUSTED_CONTENT_NOTE,
|
|
157
|
+
inputSchema: {
|
|
158
|
+
type: "object",
|
|
159
|
+
properties: {
|
|
160
|
+
pageId: { type: "string" },
|
|
161
|
+
version: { type: "number" },
|
|
162
|
+
macroId: { type: "string" },
|
|
163
|
+
},
|
|
164
|
+
required: ["pageId", "version", "macroId"],
|
|
165
|
+
},
|
|
166
|
+
handler: (server, args) => getPageMacroBodyById(server.requireUserClient(), parseArgs(GetPageMacroBodyByIdArgsSchema, args)),
|
|
167
|
+
},
|
|
168
|
+
list_page_properties: {
|
|
169
|
+
description: "List all custom properties (key/value metadata) stored on a page.",
|
|
170
|
+
inputSchema: {
|
|
171
|
+
type: "object",
|
|
172
|
+
properties: { pageId: { type: "string" } },
|
|
173
|
+
required: ["pageId"],
|
|
174
|
+
},
|
|
175
|
+
handler: (server, args) => listPageProperties(server.requireUserClient(), parseArgs(ListPagePropertiesArgsSchema, args)),
|
|
176
|
+
},
|
|
177
|
+
get_page_property: {
|
|
178
|
+
description: "Get a single custom property by key from a page.",
|
|
179
|
+
inputSchema: {
|
|
180
|
+
type: "object",
|
|
181
|
+
properties: { pageId: { type: "string" }, key: { type: "string" } },
|
|
182
|
+
required: ["pageId", "key"],
|
|
183
|
+
},
|
|
184
|
+
handler: (server, args) => getPageProperty(server.requireUserClient(), parseArgs(GetPagePropertyArgsSchema, args)),
|
|
185
|
+
},
|
|
186
|
+
create_page_property: {
|
|
187
|
+
description: "Create a custom property (key/value metadata) on a page. Fails if the key already exists — use update_page_property instead.",
|
|
188
|
+
inputSchema: {
|
|
189
|
+
type: "object",
|
|
190
|
+
properties: { pageId: { type: "string" }, key: { type: "string" }, value: {} },
|
|
191
|
+
required: ["pageId", "key", "value"],
|
|
192
|
+
},
|
|
193
|
+
handler: (server, args) => createPageProperty(server.requireUserClient(), parseArgs(CreatePagePropertyArgsSchema, args)),
|
|
194
|
+
},
|
|
195
|
+
update_page_property: {
|
|
196
|
+
description: "Update an existing page property's value. Call get_page_property or list_page_properties first to obtain currentVersion.",
|
|
197
|
+
inputSchema: {
|
|
198
|
+
type: "object",
|
|
199
|
+
properties: {
|
|
200
|
+
pageId: { type: "string" },
|
|
201
|
+
key: { type: "string" },
|
|
202
|
+
value: {},
|
|
203
|
+
currentVersion: { type: "number" },
|
|
204
|
+
},
|
|
205
|
+
required: ["pageId", "key", "value", "currentVersion"],
|
|
206
|
+
},
|
|
207
|
+
handler: (server, args) => updatePageProperty(server.requireUserClient(), parseArgs(UpdatePagePropertyArgsSchema, args)),
|
|
208
|
+
},
|
|
209
|
+
delete_page_property: {
|
|
210
|
+
description: "Delete a custom property from a page.",
|
|
211
|
+
inputSchema: {
|
|
212
|
+
type: "object",
|
|
213
|
+
properties: { pageId: { type: "string" }, key: { type: "string" } },
|
|
214
|
+
required: ["pageId", "key"],
|
|
215
|
+
},
|
|
216
|
+
handler: (server, args) => deletePageProperty(server.requireUserClient(), parseArgs(DeletePagePropertyArgsSchema, args)),
|
|
217
|
+
},
|
|
218
|
+
delete_page_version: {
|
|
219
|
+
description: "Permanently delete one historical version of a page (not the current version).",
|
|
220
|
+
inputSchema: {
|
|
221
|
+
type: "object",
|
|
222
|
+
properties: { pageId: { type: "string" }, versionNumber: { type: "number" } },
|
|
223
|
+
required: ["pageId", "versionNumber"],
|
|
224
|
+
},
|
|
225
|
+
handler: (server, args) => deletePageVersion(server.requireUserClient(), parseArgs(DeletePageVersionArgsSchema, args)),
|
|
226
|
+
},
|
|
227
|
+
scan_content: {
|
|
228
|
+
description: "Scan all content in a space via cursor-based pagination — for bulk/migration-style traversal, " +
|
|
229
|
+
"not interactive browsing (use list_content or search_content for that).",
|
|
230
|
+
inputSchema: {
|
|
231
|
+
type: "object",
|
|
232
|
+
properties: {
|
|
233
|
+
spaceKey: { type: "string" },
|
|
234
|
+
type: { type: "string" },
|
|
235
|
+
cursor: { type: "string" },
|
|
236
|
+
limit: { type: "number" },
|
|
237
|
+
},
|
|
238
|
+
},
|
|
239
|
+
handler: (server, args) => scanContent(server.requireUserClient(), parseArgs(ScanContentArgsSchema, args ?? {})),
|
|
240
|
+
},
|
|
241
|
+
convert_content_body: {
|
|
242
|
+
description: 'Convert content body between representations, e.g. "storage" (HTML-like XML) to "view" (rendered HTML).' + UNTRUSTED_CONTENT_NOTE,
|
|
243
|
+
inputSchema: {
|
|
244
|
+
type: "object",
|
|
245
|
+
properties: {
|
|
246
|
+
value: { type: "string" },
|
|
247
|
+
from: { type: "string" },
|
|
248
|
+
to: { type: "string" },
|
|
249
|
+
},
|
|
250
|
+
required: ["value", "from", "to"],
|
|
251
|
+
},
|
|
252
|
+
handler: (server, args) => convertContentBody(server.requireUserClient(), parseArgs(ConvertContentBodyArgsSchema, args)),
|
|
253
|
+
},
|
|
254
|
+
get_page_watchers: {
|
|
255
|
+
description: "List users watching a page.",
|
|
256
|
+
inputSchema: {
|
|
257
|
+
type: "object",
|
|
258
|
+
properties: { pageId: { type: "string" } },
|
|
259
|
+
required: ["pageId"],
|
|
260
|
+
},
|
|
261
|
+
handler: (server, args) => getPageWatchers(server.requireUserClient(), parseArgs(GetPageWatchersArgsSchema, args)),
|
|
262
|
+
},
|
|
263
|
+
list_page_children: {
|
|
264
|
+
description: "List a page's direct children (any content type).",
|
|
265
|
+
inputSchema: {
|
|
266
|
+
type: "object",
|
|
267
|
+
properties: { pageId: { type: "string" } },
|
|
268
|
+
required: ["pageId"],
|
|
269
|
+
},
|
|
270
|
+
handler: (server, args) => listPageChildren(server.requireUserClient(), parseArgs(ListPageChildrenArgsSchema, args)),
|
|
271
|
+
},
|
|
272
|
+
list_page_children_of_type: {
|
|
273
|
+
description: 'List a page\'s direct children of a given type, e.g. "page", "comment", "attachment".',
|
|
274
|
+
inputSchema: {
|
|
275
|
+
type: "object",
|
|
276
|
+
properties: { pageId: { type: "string" }, type: { type: "string" } },
|
|
277
|
+
required: ["pageId", "type"],
|
|
278
|
+
},
|
|
279
|
+
handler: (server, args) => listPageChildrenOfType(server.requireUserClient(), parseArgs(ListPageChildrenOfTypeArgsSchema, args)),
|
|
280
|
+
},
|
|
281
|
+
list_page_comments: {
|
|
282
|
+
description: "List a page's comments." + UNTRUSTED_CONTENT_NOTE,
|
|
283
|
+
inputSchema: {
|
|
284
|
+
type: "object",
|
|
285
|
+
properties: { pageId: { type: "string" } },
|
|
286
|
+
required: ["pageId"],
|
|
287
|
+
},
|
|
288
|
+
handler: (server, args) => listPageComments(server.requireUserClient(), parseArgs(ListPageCommentsArgsSchema, args)),
|
|
289
|
+
},
|
|
290
|
+
list_page_descendants: {
|
|
291
|
+
description: "List the content types that have descendants under this page (e.g. \"comment\", " +
|
|
292
|
+
"\"attachment\") — Confluence's own API does not return descendant content directly here, " +
|
|
293
|
+
"only which types exist; call list_page_descendants_of_type with one of the returned types " +
|
|
294
|
+
"to get actual content.",
|
|
295
|
+
inputSchema: {
|
|
296
|
+
type: "object",
|
|
297
|
+
properties: { pageId: { type: "string" } },
|
|
298
|
+
required: ["pageId"],
|
|
299
|
+
},
|
|
300
|
+
handler: (server, args) => listPageDescendants(server.requireUserClient(), parseArgs(ListPageDescendantsArgsSchema, args)),
|
|
301
|
+
},
|
|
302
|
+
list_page_descendants_of_type: {
|
|
303
|
+
description: "List all of a page's descendants of a given content type (e.g. \"comment\", " +
|
|
304
|
+
"\"attachment\" — see list_page_descendants for which types exist under a given page). " +
|
|
305
|
+
"Confirmed live: type=\"page\" 500s server-side on this Confluence version even though it's " +
|
|
306
|
+
"a documented example type elsewhere in Atlassian's API docs — a real server-side " +
|
|
307
|
+
"limitation, not specific to this tool.",
|
|
308
|
+
inputSchema: {
|
|
309
|
+
type: "object",
|
|
310
|
+
properties: { pageId: { type: "string" }, type: { type: "string" } },
|
|
311
|
+
required: ["pageId", "type"],
|
|
312
|
+
},
|
|
313
|
+
handler: (server, args) => listPageDescendantsOfType(server.requireUserClient(), parseArgs(ListPageDescendantsOfTypeArgsSchema, args)),
|
|
314
|
+
},
|
|
315
|
+
count_descendant_pages: {
|
|
316
|
+
description: "Count how many descendant pages a page has.",
|
|
317
|
+
inputSchema: {
|
|
318
|
+
type: "object",
|
|
319
|
+
properties: { pageId: { type: "string" } },
|
|
320
|
+
required: ["pageId"],
|
|
321
|
+
},
|
|
322
|
+
handler: (server, args) => countDescendantPages(server.requireUserClient(), parseArgs(CountDescendantPagesArgsSchema, args)),
|
|
323
|
+
},
|
|
324
|
+
update_page_restrictions: {
|
|
325
|
+
description: "Replace a page's view/edit restrictions with the given list. Each entry sets who (by " +
|
|
326
|
+
"username/group name) can perform one operation (e.g. \"read\", \"update\") — replaces any " +
|
|
327
|
+
"existing restriction for that operation entirely, does not merge.",
|
|
328
|
+
inputSchema: {
|
|
329
|
+
type: "object",
|
|
330
|
+
properties: {
|
|
331
|
+
pageId: { type: "string" },
|
|
332
|
+
restrictions: {
|
|
333
|
+
type: "array",
|
|
334
|
+
items: {
|
|
335
|
+
type: "object",
|
|
336
|
+
properties: {
|
|
337
|
+
operation: { type: "string" },
|
|
338
|
+
usernames: { type: "array", items: { type: "string" } },
|
|
339
|
+
groupNames: { type: "array", items: { type: "string" } },
|
|
340
|
+
},
|
|
341
|
+
required: ["operation"],
|
|
342
|
+
},
|
|
343
|
+
},
|
|
344
|
+
},
|
|
345
|
+
required: ["pageId", "restrictions"],
|
|
346
|
+
},
|
|
347
|
+
handler: (server, args) => updatePageRestrictions(server.requireUserClient(), parseArgs(UpdatePageRestrictionsArgsSchema, args)),
|
|
348
|
+
},
|
|
349
|
+
get_page_restrictions_by_operation: {
|
|
350
|
+
description: "Get all of a page's restrictions, grouped by operation.",
|
|
351
|
+
inputSchema: {
|
|
352
|
+
type: "object",
|
|
353
|
+
properties: { pageId: { type: "string" } },
|
|
354
|
+
required: ["pageId"],
|
|
355
|
+
},
|
|
356
|
+
handler: (server, args) => getPageRestrictionsByOperation(server.requireUserClient(), parseArgs(GetPageRestrictionsByOperationArgsSchema, args)),
|
|
357
|
+
},
|
|
358
|
+
get_page_restrictions_for_operation: {
|
|
359
|
+
description: 'Get a page\'s restrictions for one specific operation, e.g. "read" or "update".',
|
|
360
|
+
inputSchema: {
|
|
361
|
+
type: "object",
|
|
362
|
+
properties: { pageId: { type: "string" }, operationKey: { type: "string" } },
|
|
363
|
+
required: ["pageId", "operationKey"],
|
|
364
|
+
},
|
|
365
|
+
handler: (server, args) => getPageRestrictionsForOperation(server.requireUserClient(), parseArgs(GetPageRestrictionsForOperationArgsSchema, args)),
|
|
366
|
+
},
|
|
367
|
+
get_page_relevant_view_restrictions: {
|
|
368
|
+
description: "Get a page's effective view restrictions, including those inherited from ancestor pages.",
|
|
369
|
+
inputSchema: {
|
|
370
|
+
type: "object",
|
|
371
|
+
properties: { pageId: { type: "string" } },
|
|
372
|
+
required: ["pageId"],
|
|
373
|
+
},
|
|
374
|
+
handler: (server, args) => getPageRelevantViewRestrictions(server.requireUserClient(), parseArgs(GetPageRelevantViewRestrictionsArgsSchema, args)),
|
|
375
|
+
},
|
|
376
|
+
publish_legacy_blueprint_draft: {
|
|
377
|
+
description: "Publish an in-progress blueprint draft (legacy editor) as a real page. The draftId comes " +
|
|
378
|
+
"from Confluence's own editor UI — there is no API to create or list drafts.",
|
|
379
|
+
inputSchema: {
|
|
380
|
+
type: "object",
|
|
381
|
+
properties: { draftId: { type: "string" }, title: { type: "string" }, spaceKey: { type: "string" } },
|
|
382
|
+
required: ["draftId", "title", "spaceKey"],
|
|
383
|
+
},
|
|
384
|
+
handler: (server, args) => publishLegacyBlueprintDraft(server.requireUserClient(), parseArgs(PublishLegacyBlueprintDraftArgsSchema, args)),
|
|
385
|
+
},
|
|
386
|
+
publish_shared_blueprint_draft: {
|
|
387
|
+
description: "Publish an in-progress blueprint draft (shared/collaborative editor) as a real page. The " +
|
|
388
|
+
"draftId comes from Confluence's own editor UI — there is no API to create or list drafts.",
|
|
389
|
+
inputSchema: {
|
|
390
|
+
type: "object",
|
|
391
|
+
properties: { draftId: { type: "string" }, title: { type: "string" }, spaceKey: { type: "string" } },
|
|
392
|
+
required: ["draftId", "title", "spaceKey"],
|
|
393
|
+
},
|
|
394
|
+
handler: (server, args) => publishSharedBlueprintDraft(server.requireUserClient(), parseArgs(PublishSharedBlueprintDraftArgsSchema, args)),
|
|
395
|
+
},
|
|
396
|
+
list_page_labels: {
|
|
397
|
+
description: "List labels on a page.",
|
|
398
|
+
inputSchema: {
|
|
399
|
+
type: "object",
|
|
400
|
+
properties: { pageId: { type: "string" } },
|
|
401
|
+
required: ["pageId"],
|
|
402
|
+
},
|
|
403
|
+
handler: (server, args) => listPageLabels(server.requireUserClient(), parseArgs(ListPageLabelsArgsSchema, args)),
|
|
404
|
+
},
|
|
405
|
+
add_page_labels: {
|
|
406
|
+
description: "Add one or more labels to a page.",
|
|
407
|
+
inputSchema: {
|
|
408
|
+
type: "object",
|
|
409
|
+
properties: { pageId: { type: "string" }, names: { type: "array", items: { type: "string" } } },
|
|
410
|
+
required: ["pageId", "names"],
|
|
411
|
+
},
|
|
412
|
+
handler: (server, args) => addPageLabels(server.requireUserClient(), parseArgs(AddPageLabelsArgsSchema, args)),
|
|
413
|
+
},
|
|
414
|
+
delete_page_label: {
|
|
415
|
+
description: "Remove a label from a page.",
|
|
416
|
+
inputSchema: {
|
|
417
|
+
type: "object",
|
|
418
|
+
properties: { pageId: { type: "string" }, label: { type: "string" } },
|
|
419
|
+
required: ["pageId", "label"],
|
|
420
|
+
},
|
|
421
|
+
handler: (server, args) => deletePageLabel(server.requireUserClient(), parseArgs(DeletePageLabelArgsSchema, args)),
|
|
422
|
+
},
|
|
423
|
+
get_related_labels: {
|
|
424
|
+
description: "Get labels commonly used together with a given label, globally (returns global labels only).",
|
|
425
|
+
inputSchema: {
|
|
426
|
+
type: "object",
|
|
427
|
+
properties: { labelName: { type: "string" } },
|
|
428
|
+
required: ["labelName"],
|
|
429
|
+
},
|
|
430
|
+
handler: (server, args) => getRelatedLabels(server.requireUserClient(), parseArgs(GetRelatedLabelsArgsSchema, args)),
|
|
431
|
+
},
|
|
432
|
+
search_labels: {
|
|
433
|
+
description: "Search labels by name, namespace, space, or owner.",
|
|
434
|
+
inputSchema: {
|
|
435
|
+
type: "object",
|
|
436
|
+
properties: {
|
|
437
|
+
spaceKey: { type: "string" },
|
|
438
|
+
owner: { type: "string" },
|
|
439
|
+
namespace: { type: "string" },
|
|
440
|
+
labelName: { type: "string" },
|
|
441
|
+
},
|
|
442
|
+
},
|
|
443
|
+
handler: (server, args) => searchLabels(server.requireUserClient(), parseArgs(SearchLabelsArgsSchema, args ?? {})),
|
|
444
|
+
},
|
|
445
|
+
get_popular_labels: {
|
|
446
|
+
description: "Get the most popular labels instance-wide.",
|
|
447
|
+
inputSchema: { type: "object", properties: {} },
|
|
448
|
+
handler: (server, args) => getPopularLabels(server.requireUserClient(), parseArgs(GetPopularLabelsArgsSchema, args ?? {})),
|
|
449
|
+
},
|
|
450
|
+
get_recent_labels: {
|
|
451
|
+
description: "Get recently used labels instance-wide.",
|
|
452
|
+
inputSchema: { type: "object", properties: {} },
|
|
453
|
+
handler: (server, args) => getRecentLabels(server.requireUserClient(), parseArgs(GetRecentLabelsArgsSchema, args ?? {})),
|
|
454
|
+
},
|
|
455
|
+
list_space_labels: {
|
|
456
|
+
description: "List all labels used anywhere in a space.",
|
|
457
|
+
inputSchema: {
|
|
458
|
+
type: "object",
|
|
459
|
+
properties: { spaceKey: { type: "string" } },
|
|
460
|
+
required: ["spaceKey"],
|
|
461
|
+
},
|
|
462
|
+
handler: (server, args) => listSpaceLabels(server.requireUserClient(), parseArgs(ListSpaceLabelsArgsSchema, args)),
|
|
463
|
+
},
|
|
464
|
+
get_space_related_labels: {
|
|
465
|
+
description: "Get labels commonly used together with a given label, within one space.",
|
|
466
|
+
inputSchema: {
|
|
467
|
+
type: "object",
|
|
468
|
+
properties: { spaceKey: { type: "string" }, labelName: { type: "string" } },
|
|
469
|
+
required: ["spaceKey", "labelName"],
|
|
470
|
+
},
|
|
471
|
+
handler: (server, args) => getSpaceRelatedLabels(server.requireUserClient(), parseArgs(GetSpaceRelatedLabelsArgsSchema, args)),
|
|
472
|
+
},
|
|
473
|
+
get_space_popular_labels: {
|
|
474
|
+
description: "Get the most popular labels within a space.",
|
|
475
|
+
inputSchema: {
|
|
476
|
+
type: "object",
|
|
477
|
+
properties: { spaceKey: { type: "string" } },
|
|
478
|
+
required: ["spaceKey"],
|
|
479
|
+
},
|
|
480
|
+
handler: (server, args) => getSpacePopularLabels(server.requireUserClient(), parseArgs(GetSpacePopularLabelsArgsSchema, args)),
|
|
481
|
+
},
|
|
482
|
+
get_space_recent_labels: {
|
|
483
|
+
description: "Get recently used labels within a space.",
|
|
484
|
+
inputSchema: {
|
|
485
|
+
type: "object",
|
|
486
|
+
properties: { spaceKey: { type: "string" } },
|
|
487
|
+
required: ["spaceKey"],
|
|
488
|
+
},
|
|
489
|
+
handler: (server, args) => getSpaceRecentLabels(server.requireUserClient(), parseArgs(GetSpaceRecentLabelsArgsSchema, args)),
|
|
490
|
+
},
|
|
491
|
+
get_bulk_page_children: {
|
|
492
|
+
description: "Get a page's children via the bulk/cursor-paginated endpoint (for large-scale traversal).",
|
|
493
|
+
inputSchema: {
|
|
494
|
+
type: "object",
|
|
495
|
+
properties: { pageId: { type: "string" }, cursor: { type: "string" }, limit: { type: "number" } },
|
|
496
|
+
required: ["pageId"],
|
|
497
|
+
},
|
|
498
|
+
handler: (server, args) => getBulkPageChildren(server.requireUserClient(), parseArgs(GetBulkPageChildrenArgsSchema, args)),
|
|
499
|
+
},
|
|
500
|
+
bulk_delete_pages: {
|
|
501
|
+
description: "Permanently delete multiple pages in one request. DESTRUCTIVE and irreversible for pages " +
|
|
502
|
+
"without descendants excluded. Strongly consider preview_bulk_delete or " +
|
|
503
|
+
"get_deletable_descendant_counts first to see what would be affected.",
|
|
504
|
+
inputSchema: {
|
|
505
|
+
type: "object",
|
|
506
|
+
properties: {
|
|
507
|
+
pages: {
|
|
508
|
+
type: "array",
|
|
509
|
+
items: {
|
|
510
|
+
type: "object",
|
|
511
|
+
properties: {
|
|
512
|
+
contentId: { type: "string" },
|
|
513
|
+
deleteAllDescendants: { type: "boolean" },
|
|
514
|
+
excludedDescendantIds: { type: "array", items: { type: "string" } },
|
|
515
|
+
},
|
|
516
|
+
required: ["contentId"],
|
|
517
|
+
},
|
|
518
|
+
},
|
|
519
|
+
},
|
|
520
|
+
required: ["pages"],
|
|
521
|
+
},
|
|
522
|
+
handler: (server, args) => bulkDeletePages(server.requireUserClient(), parseArgs(BulkDeletePagesArgsSchema, args)),
|
|
523
|
+
},
|
|
524
|
+
get_deletable_descendant_counts: {
|
|
525
|
+
description: "Count how many descendants each of the given pages has that would be deleted alongside it.",
|
|
526
|
+
inputSchema: {
|
|
527
|
+
type: "object",
|
|
528
|
+
properties: { pageIds: { type: "array", items: { type: "number" } } },
|
|
529
|
+
required: ["pageIds"],
|
|
530
|
+
},
|
|
531
|
+
handler: (server, args) => getDeletableDescendantCounts(server.requireUserClient(), parseArgs(GetDeletableDescendantCountsArgsSchema, args)),
|
|
532
|
+
},
|
|
533
|
+
get_bulk_delete_limits: {
|
|
534
|
+
description: "Get the instance's limits on how many pages can be bulk-deleted in one request.",
|
|
535
|
+
inputSchema: { type: "object", properties: {} },
|
|
536
|
+
handler: (server, args) => getBulkDeleteLimits(server.requireUserClient(), parseArgs(GetBulkDeleteLimitsArgsSchema, args ?? {})),
|
|
537
|
+
},
|
|
538
|
+
preview_bulk_delete: {
|
|
539
|
+
description: "Preview the effect of a bulk_delete_pages call without deleting anything — same input shape.",
|
|
540
|
+
inputSchema: {
|
|
541
|
+
type: "object",
|
|
542
|
+
properties: {
|
|
543
|
+
pages: {
|
|
544
|
+
type: "array",
|
|
545
|
+
items: {
|
|
546
|
+
type: "object",
|
|
547
|
+
properties: {
|
|
548
|
+
contentId: { type: "string" },
|
|
549
|
+
deleteAllDescendants: { type: "boolean" },
|
|
550
|
+
excludedDescendantIds: { type: "array", items: { type: "string" } },
|
|
551
|
+
},
|
|
552
|
+
required: ["contentId"],
|
|
553
|
+
},
|
|
554
|
+
},
|
|
555
|
+
},
|
|
556
|
+
required: ["pages"],
|
|
557
|
+
},
|
|
558
|
+
handler: (server, args) => previewBulkDelete(server.requireUserClient(), parseArgs(PreviewBulkDeleteArgsSchema, args)),
|
|
559
|
+
},
|
|
560
|
+
get_space_root_pages: {
|
|
561
|
+
description: "Get a space's top-level (root) pages via the bulk/cursor-paginated endpoint.",
|
|
562
|
+
inputSchema: {
|
|
563
|
+
type: "object",
|
|
564
|
+
properties: { spaceKey: { type: "string" }, cursor: { type: "string" }, limit: { type: "number" } },
|
|
565
|
+
required: ["spaceKey"],
|
|
566
|
+
},
|
|
567
|
+
handler: (server, args) => getSpaceRootPages(server.requireUserClient(), parseArgs(GetSpaceRootPagesArgsSchema, args)),
|
|
568
|
+
},
|
|
569
|
+
list_page_attachments: {
|
|
570
|
+
description: "List a page's attachments, optionally filtered by filename or media type.",
|
|
571
|
+
inputSchema: {
|
|
572
|
+
type: "object",
|
|
573
|
+
properties: { pageId: { type: "string" }, filename: { type: "string" }, mediaType: { type: "string" } },
|
|
574
|
+
required: ["pageId"],
|
|
575
|
+
},
|
|
576
|
+
handler: (server, args) => listPageAttachments(server.requireUserClient(), parseArgs(ListPageAttachmentsArgsSchema, args)),
|
|
577
|
+
},
|
|
578
|
+
create_attachment: {
|
|
579
|
+
description: "Upload a new attachment to a page. Content must be base64-encoded.",
|
|
580
|
+
inputSchema: {
|
|
581
|
+
type: "object",
|
|
582
|
+
properties: {
|
|
583
|
+
pageId: { type: "string" },
|
|
584
|
+
filename: { type: "string" },
|
|
585
|
+
contentBase64: { type: "string" },
|
|
586
|
+
mediaType: { type: "string" },
|
|
587
|
+
comment: { type: "string" },
|
|
588
|
+
},
|
|
589
|
+
required: ["pageId", "filename", "contentBase64"],
|
|
590
|
+
},
|
|
591
|
+
handler: (server, args) => createAttachment(server.requireUserClient(), parseArgs(CreateAttachmentArgsSchema, args)),
|
|
592
|
+
},
|
|
593
|
+
delete_attachment: {
|
|
594
|
+
description: "Permanently delete an attachment (all versions).",
|
|
595
|
+
inputSchema: {
|
|
596
|
+
type: "object",
|
|
597
|
+
properties: { pageId: { type: "string" }, attachmentId: { type: "string" } },
|
|
598
|
+
required: ["pageId", "attachmentId"],
|
|
599
|
+
},
|
|
600
|
+
handler: (server, args) => deleteAttachment(server.requireUserClient(), parseArgs(DeleteAttachmentArgsSchema, args)),
|
|
601
|
+
},
|
|
602
|
+
update_attachment_metadata: {
|
|
603
|
+
description: "Rename an attachment (update its title). Call list_page_attachments first to obtain currentVersion.",
|
|
604
|
+
inputSchema: {
|
|
605
|
+
type: "object",
|
|
606
|
+
properties: {
|
|
607
|
+
pageId: { type: "string" },
|
|
608
|
+
attachmentId: { type: "string" },
|
|
609
|
+
title: { type: "string" },
|
|
610
|
+
currentVersion: { type: "number" },
|
|
611
|
+
},
|
|
612
|
+
required: ["pageId", "attachmentId", "title", "currentVersion"],
|
|
613
|
+
},
|
|
614
|
+
handler: (server, args) => updateAttachmentMetadata(server.requireUserClient(), parseArgs(UpdateAttachmentMetadataArgsSchema, args)),
|
|
615
|
+
},
|
|
616
|
+
update_attachment_data: {
|
|
617
|
+
description: "Upload new binary content for an existing attachment, creating a new version. Content must " +
|
|
618
|
+
"be base64-encoded. filename is required and becomes the attachment's title — pass its " +
|
|
619
|
+
"existing filename (from list_page_attachments) to keep the name unchanged.",
|
|
620
|
+
inputSchema: {
|
|
621
|
+
type: "object",
|
|
622
|
+
properties: {
|
|
623
|
+
pageId: { type: "string" },
|
|
624
|
+
attachmentId: { type: "string" },
|
|
625
|
+
filename: { type: "string" },
|
|
626
|
+
contentBase64: { type: "string" },
|
|
627
|
+
mediaType: { type: "string" },
|
|
628
|
+
comment: { type: "string" },
|
|
629
|
+
},
|
|
630
|
+
required: ["pageId", "attachmentId", "filename", "contentBase64"],
|
|
631
|
+
},
|
|
632
|
+
handler: (server, args) => updateAttachmentData(server.requireUserClient(), parseArgs(UpdateAttachmentDataArgsSchema, args)),
|
|
633
|
+
},
|
|
634
|
+
get_attachment_extracted_text: {
|
|
635
|
+
description: "Get Confluence's extracted plain text from an attachment (e.g. for PDFs/Office docs it has indexed)." + UNTRUSTED_CONTENT_NOTE,
|
|
636
|
+
inputSchema: {
|
|
637
|
+
type: "object",
|
|
638
|
+
properties: { pageId: { type: "string" }, attachmentId: { type: "string" } },
|
|
639
|
+
required: ["pageId", "attachmentId"],
|
|
640
|
+
},
|
|
641
|
+
handler: (server, args) => getAttachmentExtractedText(server.requireUserClient(), parseArgs(GetAttachmentExtractedTextArgsSchema, args)),
|
|
642
|
+
},
|
|
643
|
+
move_attachment: {
|
|
644
|
+
description: "Rename an attachment's filename, or move it to a different page.",
|
|
645
|
+
inputSchema: {
|
|
646
|
+
type: "object",
|
|
647
|
+
properties: {
|
|
648
|
+
pageId: { type: "string" },
|
|
649
|
+
attachmentId: { type: "string" },
|
|
650
|
+
newName: { type: "string" },
|
|
651
|
+
newContentId: { type: "string" },
|
|
652
|
+
},
|
|
653
|
+
required: ["pageId", "attachmentId"],
|
|
654
|
+
},
|
|
655
|
+
handler: (server, args) => moveAttachment(server.requireUserClient(), parseArgs(MoveAttachmentArgsSchema, args)),
|
|
656
|
+
},
|
|
657
|
+
delete_attachment_version: {
|
|
658
|
+
description: "Permanently delete one historical version of an attachment (not the current version).",
|
|
659
|
+
inputSchema: {
|
|
660
|
+
type: "object",
|
|
661
|
+
properties: { pageId: { type: "string" }, attachmentId: { type: "string" }, version: { type: "number" } },
|
|
662
|
+
required: ["pageId", "attachmentId", "version"],
|
|
663
|
+
},
|
|
664
|
+
handler: (server, args) => deleteAttachmentVersion(server.requireUserClient(), parseArgs(DeleteAttachmentVersionArgsSchema, args)),
|
|
665
|
+
},
|
|
666
|
+
create_space: {
|
|
667
|
+
description: "Create a new global Confluence space. See skill://spaces-admin for real gotchas across this tool surface.",
|
|
668
|
+
inputSchema: {
|
|
669
|
+
type: "object",
|
|
670
|
+
properties: { key: { type: "string" }, name: { type: "string" }, description: { type: "string" } },
|
|
671
|
+
required: ["key", "name"],
|
|
672
|
+
},
|
|
673
|
+
handler: (server, args) => createSpace(server.requireUserClient(), parseArgs(CreateSpaceArgsSchema, args)),
|
|
674
|
+
},
|
|
675
|
+
create_private_space: {
|
|
676
|
+
description: "Create a new private space (visible only to its creator until permissions are granted).",
|
|
677
|
+
inputSchema: {
|
|
678
|
+
type: "object",
|
|
679
|
+
properties: { key: { type: "string" }, name: { type: "string" }, description: { type: "string" } },
|
|
680
|
+
required: ["key", "name"],
|
|
681
|
+
},
|
|
682
|
+
handler: (server, args) => createPrivateSpace(server.requireUserClient(), parseArgs(CreatePrivateSpaceArgsSchema, args)),
|
|
683
|
+
},
|
|
684
|
+
create_personal_space: {
|
|
685
|
+
description: "Create the personal space for the acting user (one per user, key derived automatically).",
|
|
686
|
+
inputSchema: {
|
|
687
|
+
type: "object",
|
|
688
|
+
properties: { description: { type: "string" }, isPrivate: { type: "boolean" } },
|
|
689
|
+
},
|
|
690
|
+
handler: (server, args) => createPersonalSpace(server.requireUserClient(), parseArgs(CreatePersonalSpaceArgsSchema, args ?? {})),
|
|
691
|
+
},
|
|
692
|
+
delete_space: {
|
|
693
|
+
description: "Permanently delete a space and all its content. DESTRUCTIVE, asynchronous, and irreversible.",
|
|
694
|
+
inputSchema: {
|
|
695
|
+
type: "object",
|
|
696
|
+
properties: { spaceKey: { type: "string" } },
|
|
697
|
+
required: ["spaceKey"],
|
|
698
|
+
},
|
|
699
|
+
handler: (server, args) => deleteSpace(server.requireUserClient(), parseArgs(DeleteSpaceArgsSchema, args)),
|
|
700
|
+
},
|
|
701
|
+
update_space: {
|
|
702
|
+
description: "Update a space's name and/or description.",
|
|
703
|
+
inputSchema: {
|
|
704
|
+
type: "object",
|
|
705
|
+
properties: { spaceKey: { type: "string" }, name: { type: "string" }, description: { type: "string" } },
|
|
706
|
+
required: ["spaceKey"],
|
|
707
|
+
},
|
|
708
|
+
handler: (server, args) => updateSpace(server.requireUserClient(), parseArgs(UpdateSpaceArgsSchema, args)),
|
|
709
|
+
},
|
|
710
|
+
archive_space: {
|
|
711
|
+
description: "Archive a space, making it read-only and hidden from default space listings.",
|
|
712
|
+
inputSchema: {
|
|
713
|
+
type: "object",
|
|
714
|
+
properties: { spaceKey: { type: "string" } },
|
|
715
|
+
required: ["spaceKey"],
|
|
716
|
+
},
|
|
717
|
+
handler: (server, args) => archiveSpace(server.requireUserClient(), parseArgs(ArchiveSpaceArgsSchema, args)),
|
|
718
|
+
},
|
|
719
|
+
add_space_category: {
|
|
720
|
+
description: "Add a category label to a space.",
|
|
721
|
+
inputSchema: {
|
|
722
|
+
type: "object",
|
|
723
|
+
properties: { spaceKey: { type: "string" }, categoryName: { type: "string" } },
|
|
724
|
+
required: ["spaceKey", "categoryName"],
|
|
725
|
+
},
|
|
726
|
+
handler: (server, args) => addSpaceCategory(server.requireUserClient(), parseArgs(AddSpaceCategoryArgsSchema, args)),
|
|
727
|
+
},
|
|
728
|
+
remove_space_category: {
|
|
729
|
+
description: "Remove a category label from a space.",
|
|
730
|
+
inputSchema: {
|
|
731
|
+
type: "object",
|
|
732
|
+
properties: { spaceKey: { type: "string" }, categoryName: { type: "string" } },
|
|
733
|
+
required: ["spaceKey", "categoryName"],
|
|
734
|
+
},
|
|
735
|
+
handler: (server, args) => removeSpaceCategory(server.requireUserClient(), parseArgs(RemoveSpaceCategoryArgsSchema, args)),
|
|
736
|
+
},
|
|
737
|
+
list_space_content: {
|
|
738
|
+
description: "Get a space's content index, grouped by content type.",
|
|
739
|
+
inputSchema: {
|
|
740
|
+
type: "object",
|
|
741
|
+
properties: { spaceKey: { type: "string" } },
|
|
742
|
+
required: ["spaceKey"],
|
|
743
|
+
},
|
|
744
|
+
handler: (server, args) => listSpaceContent(server.requireUserClient(), parseArgs(ListSpaceContentArgsSchema, args)),
|
|
745
|
+
},
|
|
746
|
+
list_space_content_of_type: {
|
|
747
|
+
description: 'List a space\'s content of a given type, e.g. "page", "blogpost".',
|
|
748
|
+
inputSchema: {
|
|
749
|
+
type: "object",
|
|
750
|
+
properties: { spaceKey: { type: "string" }, type: { type: "string" } },
|
|
751
|
+
required: ["spaceKey", "type"],
|
|
752
|
+
},
|
|
753
|
+
handler: (server, args) => listSpaceContentOfType(server.requireUserClient(), parseArgs(ListSpaceContentOfTypeArgsSchema, args)),
|
|
754
|
+
},
|
|
755
|
+
list_space_properties: {
|
|
756
|
+
description: "List all custom properties (key/value metadata) stored on a space.",
|
|
757
|
+
inputSchema: {
|
|
758
|
+
type: "object",
|
|
759
|
+
properties: { spaceKey: { type: "string" } },
|
|
760
|
+
required: ["spaceKey"],
|
|
761
|
+
},
|
|
762
|
+
handler: (server, args) => listSpaceProperties(server.requireUserClient(), parseArgs(ListSpacePropertiesArgsSchema, args)),
|
|
763
|
+
},
|
|
764
|
+
create_space_property: {
|
|
765
|
+
description: "Create a custom property on a space. Fails if the key already exists — use update_space_property instead.",
|
|
766
|
+
inputSchema: {
|
|
767
|
+
type: "object",
|
|
768
|
+
properties: { spaceKey: { type: "string" }, key: { type: "string" }, value: {} },
|
|
769
|
+
required: ["spaceKey", "key", "value"],
|
|
770
|
+
},
|
|
771
|
+
handler: (server, args) => createSpaceProperty(server.requireUserClient(), parseArgs(CreateSpacePropertyArgsSchema, args)),
|
|
772
|
+
},
|
|
773
|
+
get_space_property: {
|
|
774
|
+
description: "Get a single custom property by key from a space.",
|
|
775
|
+
inputSchema: {
|
|
776
|
+
type: "object",
|
|
777
|
+
properties: { spaceKey: { type: "string" }, key: { type: "string" } },
|
|
778
|
+
required: ["spaceKey", "key"],
|
|
779
|
+
},
|
|
780
|
+
handler: (server, args) => getSpaceProperty(server.requireUserClient(), parseArgs(GetSpacePropertyArgsSchema, args)),
|
|
781
|
+
},
|
|
782
|
+
update_space_property: {
|
|
783
|
+
description: "Update an existing space property's value. Call get_space_property first to obtain currentVersion.",
|
|
784
|
+
inputSchema: {
|
|
785
|
+
type: "object",
|
|
786
|
+
properties: { spaceKey: { type: "string" }, key: { type: "string" }, value: {}, currentVersion: { type: "number" } },
|
|
787
|
+
required: ["spaceKey", "key", "value", "currentVersion"],
|
|
788
|
+
},
|
|
789
|
+
handler: (server, args) => updateSpaceProperty(server.requireUserClient(), parseArgs(UpdateSpacePropertyArgsSchema, args)),
|
|
790
|
+
},
|
|
791
|
+
delete_space_property: {
|
|
792
|
+
description: "Delete a custom property from a space.",
|
|
793
|
+
inputSchema: {
|
|
794
|
+
type: "object",
|
|
795
|
+
properties: { spaceKey: { type: "string" }, key: { type: "string" } },
|
|
796
|
+
required: ["spaceKey", "key"],
|
|
797
|
+
},
|
|
798
|
+
handler: (server, args) => deleteSpaceProperty(server.requireUserClient(), parseArgs(DeleteSpacePropertyArgsSchema, args)),
|
|
799
|
+
},
|
|
800
|
+
admin_restore_space: {
|
|
801
|
+
description: "Restore a previously deleted space, if still within the recovery window. Admin operation.",
|
|
802
|
+
inputSchema: {
|
|
803
|
+
type: "object",
|
|
804
|
+
properties: { spaceKey: { type: "string" } },
|
|
805
|
+
required: ["spaceKey"],
|
|
806
|
+
},
|
|
807
|
+
requiresAdmin: true,
|
|
808
|
+
handler: (server, args) => restoreSpace(server.requireAdminClient(), parseArgs(RestoreSpaceArgsSchema, args)),
|
|
809
|
+
},
|
|
810
|
+
empty_space_trash: {
|
|
811
|
+
description: "Permanently delete all trashed content in a space in one operation. DESTRUCTIVE, asynchronous, and irreversible.",
|
|
812
|
+
inputSchema: {
|
|
813
|
+
type: "object",
|
|
814
|
+
properties: { spaceKey: { type: "string" } },
|
|
815
|
+
required: ["spaceKey"],
|
|
816
|
+
},
|
|
817
|
+
handler: (server, args) => emptySpaceTrash(server.requireUserClient(), parseArgs(EmptySpaceTrashArgsSchema, args)),
|
|
818
|
+
},
|
|
819
|
+
list_space_trash: {
|
|
820
|
+
description: "List a space's trashed (soft-deleted) content.",
|
|
821
|
+
inputSchema: {
|
|
822
|
+
type: "object",
|
|
823
|
+
properties: { spaceKey: { type: "string" } },
|
|
824
|
+
required: ["spaceKey"],
|
|
825
|
+
},
|
|
826
|
+
handler: (server, args) => listSpaceTrash(server.requireUserClient(), parseArgs(ListSpaceTrashArgsSchema, args)),
|
|
827
|
+
},
|
|
828
|
+
get_space_watchers: {
|
|
829
|
+
description: "List users watching a space.",
|
|
830
|
+
inputSchema: {
|
|
831
|
+
type: "object",
|
|
832
|
+
properties: { spaceKey: { type: "string" } },
|
|
833
|
+
required: ["spaceKey"],
|
|
834
|
+
},
|
|
835
|
+
handler: (server, args) => getSpaceWatchers(server.requireUserClient(), parseArgs(GetSpaceWatchersArgsSchema, args)),
|
|
836
|
+
},
|
|
837
|
+
admin_list_global_permissions: {
|
|
838
|
+
description: "List all global permission grants instance-wide. See skill://permissions for real gotchas across this tool surface.",
|
|
839
|
+
inputSchema: { type: "object", properties: {} },
|
|
840
|
+
requiresAdmin: true,
|
|
841
|
+
handler: (server, args) => listGlobalPermissions(server.requireAdminClient(), parseArgs(ListGlobalPermissionsArgsSchema, args ?? {})),
|
|
842
|
+
},
|
|
843
|
+
admin_set_global_permissions: {
|
|
844
|
+
description: "Replace global permissions for multiple users/groups in one call.",
|
|
845
|
+
inputSchema: {
|
|
846
|
+
type: "object",
|
|
847
|
+
properties: {
|
|
848
|
+
subjects: {
|
|
849
|
+
type: "array",
|
|
850
|
+
items: {
|
|
851
|
+
type: "object",
|
|
852
|
+
properties: {
|
|
853
|
+
userKey: { type: "string" },
|
|
854
|
+
groupName: { type: "string" },
|
|
855
|
+
operations: { type: "array", items: { type: "object" } },
|
|
856
|
+
},
|
|
857
|
+
required: ["operations"],
|
|
858
|
+
},
|
|
859
|
+
},
|
|
860
|
+
},
|
|
861
|
+
required: ["subjects"],
|
|
862
|
+
},
|
|
863
|
+
requiresAdmin: true,
|
|
864
|
+
handler: (server, args) => setGlobalPermissions(server.requireAdminClient(), parseArgs(SetGlobalPermissionsArgsSchema, args)),
|
|
865
|
+
},
|
|
866
|
+
admin_get_anonymous_global_permissions: {
|
|
867
|
+
description: "Get global permissions granted to anonymous (unauthenticated) users.",
|
|
868
|
+
inputSchema: { type: "object", properties: {} },
|
|
869
|
+
requiresAdmin: true,
|
|
870
|
+
handler: (server, args) => getAnonymousGlobalPermissions(server.requireAdminClient(), parseArgs(GetAnonymousGlobalPermissionsArgsSchema, args ?? {})),
|
|
871
|
+
},
|
|
872
|
+
admin_grant_anonymous_global_permissions: {
|
|
873
|
+
description: "Grant global permissions to anonymous (unauthenticated) users.",
|
|
874
|
+
inputSchema: {
|
|
875
|
+
type: "object",
|
|
876
|
+
properties: { operations: { type: "array", items: { type: "object" } } },
|
|
877
|
+
required: ["operations"],
|
|
878
|
+
},
|
|
879
|
+
requiresAdmin: true,
|
|
880
|
+
handler: (server, args) => grantAnonymousGlobalPermissions(server.requireAdminClient(), parseArgs(GrantAnonymousGlobalPermissionsArgsSchema, args)),
|
|
881
|
+
},
|
|
882
|
+
admin_revoke_anonymous_global_permissions: {
|
|
883
|
+
description: "Revoke global permissions from anonymous (unauthenticated) users.",
|
|
884
|
+
inputSchema: {
|
|
885
|
+
type: "object",
|
|
886
|
+
properties: { operations: { type: "array", items: { type: "object" } } },
|
|
887
|
+
required: ["operations"],
|
|
888
|
+
},
|
|
889
|
+
requiresAdmin: true,
|
|
890
|
+
handler: (server, args) => revokeAnonymousGlobalPermissions(server.requireAdminClient(), parseArgs(RevokeAnonymousGlobalPermissionsArgsSchema, args)),
|
|
891
|
+
},
|
|
892
|
+
admin_get_group_global_permissions: {
|
|
893
|
+
description: "Get global permissions granted to a group.",
|
|
894
|
+
inputSchema: {
|
|
895
|
+
type: "object",
|
|
896
|
+
properties: { groupName: { type: "string" } },
|
|
897
|
+
required: ["groupName"],
|
|
898
|
+
},
|
|
899
|
+
requiresAdmin: true,
|
|
900
|
+
handler: (server, args) => getGroupGlobalPermissions(server.requireAdminClient(), parseArgs(GetGroupGlobalPermissionsArgsSchema, args)),
|
|
901
|
+
},
|
|
902
|
+
admin_grant_group_global_permissions: {
|
|
903
|
+
description: "Grant global permissions to a group.",
|
|
904
|
+
inputSchema: {
|
|
905
|
+
type: "object",
|
|
906
|
+
properties: { groupName: { type: "string" }, operations: { type: "array", items: { type: "object" } } },
|
|
907
|
+
required: ["groupName", "operations"],
|
|
908
|
+
},
|
|
909
|
+
requiresAdmin: true,
|
|
910
|
+
handler: (server, args) => grantGroupGlobalPermissions(server.requireAdminClient(), parseArgs(GrantGroupGlobalPermissionsArgsSchema, args)),
|
|
911
|
+
},
|
|
912
|
+
admin_revoke_group_global_permissions: {
|
|
913
|
+
description: "Revoke global permissions from a group.",
|
|
914
|
+
inputSchema: {
|
|
915
|
+
type: "object",
|
|
916
|
+
properties: { groupName: { type: "string" }, operations: { type: "array", items: { type: "object" } } },
|
|
917
|
+
required: ["groupName", "operations"],
|
|
918
|
+
},
|
|
919
|
+
requiresAdmin: true,
|
|
920
|
+
handler: (server, args) => revokeGroupGlobalPermissions(server.requireAdminClient(), parseArgs(RevokeGroupGlobalPermissionsArgsSchema, args)),
|
|
921
|
+
},
|
|
922
|
+
admin_get_unlicensed_global_permissions: {
|
|
923
|
+
description: "Get global permissions granted to unlicensed users.",
|
|
924
|
+
inputSchema: { type: "object", properties: {} },
|
|
925
|
+
requiresAdmin: true,
|
|
926
|
+
handler: (server, args) => getUnlicensedGlobalPermissions(server.requireAdminClient(), parseArgs(GetUnlicensedGlobalPermissionsArgsSchema, args ?? {})),
|
|
927
|
+
},
|
|
928
|
+
admin_grant_unlicensed_global_permissions: {
|
|
929
|
+
description: "Grant global permissions to unlicensed users.",
|
|
930
|
+
inputSchema: {
|
|
931
|
+
type: "object",
|
|
932
|
+
properties: { operations: { type: "array", items: { type: "object" } } },
|
|
933
|
+
required: ["operations"],
|
|
934
|
+
},
|
|
935
|
+
requiresAdmin: true,
|
|
936
|
+
handler: (server, args) => grantUnlicensedGlobalPermissions(server.requireAdminClient(), parseArgs(GrantUnlicensedGlobalPermissionsArgsSchema, args)),
|
|
937
|
+
},
|
|
938
|
+
admin_revoke_unlicensed_global_permissions: {
|
|
939
|
+
description: "Revoke global permissions from unlicensed users.",
|
|
940
|
+
inputSchema: {
|
|
941
|
+
type: "object",
|
|
942
|
+
properties: { operations: { type: "array", items: { type: "object" } } },
|
|
943
|
+
required: ["operations"],
|
|
944
|
+
},
|
|
945
|
+
requiresAdmin: true,
|
|
946
|
+
handler: (server, args) => revokeUnlicensedGlobalPermissions(server.requireAdminClient(), parseArgs(RevokeUnlicensedGlobalPermissionsArgsSchema, args)),
|
|
947
|
+
},
|
|
948
|
+
admin_get_user_global_permissions: {
|
|
949
|
+
description: "Get global permissions granted to a specific user.",
|
|
950
|
+
inputSchema: {
|
|
951
|
+
type: "object",
|
|
952
|
+
properties: { user: { type: "string" } },
|
|
953
|
+
required: ["user"],
|
|
954
|
+
},
|
|
955
|
+
requiresAdmin: true,
|
|
956
|
+
handler: (server, args) => getUserGlobalPermissions(server.requireAdminClient(), parseArgs(GetUserGlobalPermissionsArgsSchema, args)),
|
|
957
|
+
},
|
|
958
|
+
admin_grant_user_global_permissions: {
|
|
959
|
+
description: "Grant global permissions to a specific user.",
|
|
960
|
+
inputSchema: {
|
|
961
|
+
type: "object",
|
|
962
|
+
properties: { user: { type: "string" }, operations: { type: "array", items: { type: "object" } } },
|
|
963
|
+
required: ["user", "operations"],
|
|
964
|
+
},
|
|
965
|
+
requiresAdmin: true,
|
|
966
|
+
handler: (server, args) => grantUserGlobalPermissions(server.requireAdminClient(), parseArgs(GrantUserGlobalPermissionsArgsSchema, args)),
|
|
967
|
+
},
|
|
968
|
+
admin_revoke_user_global_permissions: {
|
|
969
|
+
description: "Revoke global permissions from a specific user.",
|
|
970
|
+
inputSchema: {
|
|
971
|
+
type: "object",
|
|
972
|
+
properties: { user: { type: "string" }, operations: { type: "array", items: { type: "object" } } },
|
|
973
|
+
required: ["user", "operations"],
|
|
974
|
+
},
|
|
975
|
+
requiresAdmin: true,
|
|
976
|
+
handler: (server, args) => revokeUserGlobalPermissions(server.requireAdminClient(), parseArgs(RevokeUserGlobalPermissionsArgsSchema, args)),
|
|
977
|
+
},
|
|
978
|
+
admin_set_space_permissions: {
|
|
979
|
+
description: "Replace space permissions for multiple users/groups in one call.",
|
|
980
|
+
inputSchema: {
|
|
981
|
+
type: "object",
|
|
982
|
+
properties: {
|
|
983
|
+
spaceKey: { type: "string" },
|
|
984
|
+
subjects: {
|
|
985
|
+
type: "array",
|
|
986
|
+
items: {
|
|
987
|
+
type: "object",
|
|
988
|
+
properties: {
|
|
989
|
+
userKey: { type: "string" },
|
|
990
|
+
groupName: { type: "string" },
|
|
991
|
+
operations: { type: "array", items: { type: "object" } },
|
|
992
|
+
},
|
|
993
|
+
required: ["operations"],
|
|
994
|
+
},
|
|
995
|
+
},
|
|
996
|
+
},
|
|
997
|
+
required: ["spaceKey", "subjects"],
|
|
998
|
+
},
|
|
999
|
+
requiresAdmin: true,
|
|
1000
|
+
handler: (server, args) => setSpacePermissions(server.requireAdminClient(), parseArgs(SetSpacePermissionsArgsSchema, args)),
|
|
1001
|
+
},
|
|
1002
|
+
admin_get_space_anonymous_permissions: {
|
|
1003
|
+
description: "Get a space's permissions granted to anonymous (unauthenticated) users.",
|
|
1004
|
+
inputSchema: {
|
|
1005
|
+
type: "object",
|
|
1006
|
+
properties: { spaceKey: { type: "string" } },
|
|
1007
|
+
required: ["spaceKey"],
|
|
1008
|
+
},
|
|
1009
|
+
requiresAdmin: true,
|
|
1010
|
+
handler: (server, args) => getSpaceAnonymousPermissions(server.requireAdminClient(), parseArgs(GetSpaceAnonymousPermissionsArgsSchema, args)),
|
|
1011
|
+
},
|
|
1012
|
+
admin_grant_space_anonymous_permissions: {
|
|
1013
|
+
description: "Grant space permissions to anonymous (unauthenticated) users.",
|
|
1014
|
+
inputSchema: {
|
|
1015
|
+
type: "object",
|
|
1016
|
+
properties: { spaceKey: { type: "string" }, operations: { type: "array", items: { type: "object" } } },
|
|
1017
|
+
required: ["spaceKey", "operations"],
|
|
1018
|
+
},
|
|
1019
|
+
requiresAdmin: true,
|
|
1020
|
+
handler: (server, args) => grantSpaceAnonymousPermissions(server.requireAdminClient(), parseArgs(GrantSpaceAnonymousPermissionsArgsSchema, args)),
|
|
1021
|
+
},
|
|
1022
|
+
admin_revoke_space_anonymous_permissions: {
|
|
1023
|
+
description: "Revoke space permissions from anonymous (unauthenticated) users.",
|
|
1024
|
+
inputSchema: {
|
|
1025
|
+
type: "object",
|
|
1026
|
+
properties: { spaceKey: { type: "string" }, operations: { type: "array", items: { type: "object" } } },
|
|
1027
|
+
required: ["spaceKey", "operations"],
|
|
1028
|
+
},
|
|
1029
|
+
requiresAdmin: true,
|
|
1030
|
+
handler: (server, args) => revokeSpaceAnonymousPermissions(server.requireAdminClient(), parseArgs(RevokeSpaceAnonymousPermissionsArgsSchema, args)),
|
|
1031
|
+
},
|
|
1032
|
+
admin_get_space_group_permissions: {
|
|
1033
|
+
description: "Get a space's permissions granted to a group.",
|
|
1034
|
+
inputSchema: {
|
|
1035
|
+
type: "object",
|
|
1036
|
+
properties: { spaceKey: { type: "string" }, groupName: { type: "string" } },
|
|
1037
|
+
required: ["spaceKey", "groupName"],
|
|
1038
|
+
},
|
|
1039
|
+
requiresAdmin: true,
|
|
1040
|
+
handler: (server, args) => getSpaceGroupPermissions(server.requireAdminClient(), parseArgs(GetSpaceGroupPermissionsArgsSchema, args)),
|
|
1041
|
+
},
|
|
1042
|
+
admin_grant_space_group_permissions: {
|
|
1043
|
+
description: "Grant space permissions to a group.",
|
|
1044
|
+
inputSchema: {
|
|
1045
|
+
type: "object",
|
|
1046
|
+
properties: {
|
|
1047
|
+
spaceKey: { type: "string" },
|
|
1048
|
+
groupName: { type: "string" },
|
|
1049
|
+
operations: { type: "array", items: { type: "object" } },
|
|
1050
|
+
},
|
|
1051
|
+
required: ["spaceKey", "groupName", "operations"],
|
|
1052
|
+
},
|
|
1053
|
+
requiresAdmin: true,
|
|
1054
|
+
handler: (server, args) => grantSpaceGroupPermissions(server.requireAdminClient(), parseArgs(GrantSpaceGroupPermissionsArgsSchema, args)),
|
|
1055
|
+
},
|
|
1056
|
+
admin_revoke_space_group_permissions: {
|
|
1057
|
+
description: "Revoke space permissions from a group.",
|
|
1058
|
+
inputSchema: {
|
|
1059
|
+
type: "object",
|
|
1060
|
+
properties: {
|
|
1061
|
+
spaceKey: { type: "string" },
|
|
1062
|
+
groupName: { type: "string" },
|
|
1063
|
+
operations: { type: "array", items: { type: "object" } },
|
|
1064
|
+
},
|
|
1065
|
+
required: ["spaceKey", "groupName", "operations"],
|
|
1066
|
+
},
|
|
1067
|
+
requiresAdmin: true,
|
|
1068
|
+
handler: (server, args) => revokeSpaceGroupPermissions(server.requireAdminClient(), parseArgs(RevokeSpaceGroupPermissionsArgsSchema, args)),
|
|
1069
|
+
},
|
|
1070
|
+
admin_get_space_user_permissions: {
|
|
1071
|
+
description: "Get a space's permissions granted to a specific user.",
|
|
1072
|
+
inputSchema: {
|
|
1073
|
+
type: "object",
|
|
1074
|
+
properties: { spaceKey: { type: "string" }, userKey: { type: "string" } },
|
|
1075
|
+
required: ["spaceKey", "userKey"],
|
|
1076
|
+
},
|
|
1077
|
+
requiresAdmin: true,
|
|
1078
|
+
handler: (server, args) => getSpaceUserPermissions(server.requireAdminClient(), parseArgs(GetSpaceUserPermissionsArgsSchema, args)),
|
|
1079
|
+
},
|
|
1080
|
+
admin_grant_space_user_permissions: {
|
|
1081
|
+
description: "Grant space permissions to a specific user.",
|
|
1082
|
+
inputSchema: {
|
|
1083
|
+
type: "object",
|
|
1084
|
+
properties: {
|
|
1085
|
+
spaceKey: { type: "string" },
|
|
1086
|
+
userKey: { type: "string" },
|
|
1087
|
+
operations: { type: "array", items: { type: "object" } },
|
|
1088
|
+
},
|
|
1089
|
+
required: ["spaceKey", "userKey", "operations"],
|
|
1090
|
+
},
|
|
1091
|
+
requiresAdmin: true,
|
|
1092
|
+
handler: (server, args) => grantSpaceUserPermissions(server.requireAdminClient(), parseArgs(GrantSpaceUserPermissionsArgsSchema, args)),
|
|
1093
|
+
},
|
|
1094
|
+
admin_revoke_space_user_permissions: {
|
|
1095
|
+
description: "Revoke space permissions from a specific user.",
|
|
1096
|
+
inputSchema: {
|
|
1097
|
+
type: "object",
|
|
1098
|
+
properties: {
|
|
1099
|
+
spaceKey: { type: "string" },
|
|
1100
|
+
userKey: { type: "string" },
|
|
1101
|
+
operations: { type: "array", items: { type: "object" } },
|
|
1102
|
+
},
|
|
1103
|
+
required: ["spaceKey", "userKey", "operations"],
|
|
1104
|
+
},
|
|
1105
|
+
requiresAdmin: true,
|
|
1106
|
+
handler: (server, args) => revokeSpaceUserPermissions(server.requireAdminClient(), parseArgs(RevokeSpaceUserPermissionsArgsSchema, args)),
|
|
1107
|
+
},
|
|
1108
|
+
get_global_color_scheme: {
|
|
1109
|
+
description: "Get the instance-wide default color scheme (light and dark theme variants).",
|
|
1110
|
+
inputSchema: { type: "object", properties: {} },
|
|
1111
|
+
handler: (server, args) => getGlobalColorScheme(server.requireUserClient(), parseArgs(GetGlobalColorSchemeArgsSchema, args ?? {})),
|
|
1112
|
+
},
|
|
1113
|
+
update_global_color_scheme: {
|
|
1114
|
+
description: "Replace the instance-wide default color scheme. Pass the full scheme object (get_global_color_scheme first).",
|
|
1115
|
+
inputSchema: {
|
|
1116
|
+
type: "object",
|
|
1117
|
+
properties: { scheme: { type: "object" } },
|
|
1118
|
+
required: ["scheme"],
|
|
1119
|
+
},
|
|
1120
|
+
handler: (server, args) => updateGlobalColorScheme(server.requireUserClient(), parseArgs(UpdateGlobalColorSchemeArgsSchema, args)),
|
|
1121
|
+
},
|
|
1122
|
+
get_default_global_color_scheme: {
|
|
1123
|
+
description: "Get Confluence's built-in default color scheme (not the instance's current customization, if any).",
|
|
1124
|
+
inputSchema: { type: "object", properties: {} },
|
|
1125
|
+
handler: (server, args) => getDefaultGlobalColorScheme(server.requireUserClient(), parseArgs(GetDefaultGlobalColorSchemeArgsSchema, args ?? {})),
|
|
1126
|
+
},
|
|
1127
|
+
reset_global_color_scheme: {
|
|
1128
|
+
description: "Reset the instance-wide color scheme to Confluence's built-in default.",
|
|
1129
|
+
inputSchema: { type: "object", properties: {} },
|
|
1130
|
+
handler: (server, args) => resetGlobalColorScheme(server.requireUserClient(), parseArgs(ResetGlobalColorSchemeArgsSchema, args ?? {})),
|
|
1131
|
+
},
|
|
1132
|
+
get_space_color_scheme: {
|
|
1133
|
+
description: "Get a space's color scheme (light and dark theme variants).",
|
|
1134
|
+
inputSchema: {
|
|
1135
|
+
type: "object",
|
|
1136
|
+
properties: { spaceKey: { type: "string" } },
|
|
1137
|
+
required: ["spaceKey"],
|
|
1138
|
+
},
|
|
1139
|
+
handler: (server, args) => getSpaceColorScheme(server.requireUserClient(), parseArgs(GetSpaceColorSchemeArgsSchema, args)),
|
|
1140
|
+
},
|
|
1141
|
+
update_space_color_scheme: {
|
|
1142
|
+
description: "Replace a space's color scheme. Pass the full scheme object (get_space_color_scheme first).",
|
|
1143
|
+
inputSchema: {
|
|
1144
|
+
type: "object",
|
|
1145
|
+
properties: { spaceKey: { type: "string" }, scheme: { type: "object" } },
|
|
1146
|
+
required: ["spaceKey", "scheme"],
|
|
1147
|
+
},
|
|
1148
|
+
handler: (server, args) => updateSpaceColorScheme(server.requireUserClient(), parseArgs(UpdateSpaceColorSchemeArgsSchema, args)),
|
|
1149
|
+
},
|
|
1150
|
+
reset_space_color_scheme: {
|
|
1151
|
+
description: "Reset a space's color scheme to the instance default.",
|
|
1152
|
+
inputSchema: {
|
|
1153
|
+
type: "object",
|
|
1154
|
+
properties: { spaceKey: { type: "string" } },
|
|
1155
|
+
required: ["spaceKey"],
|
|
1156
|
+
},
|
|
1157
|
+
handler: (server, args) => resetSpaceColorScheme(server.requireUserClient(), parseArgs(ResetSpaceColorSchemeArgsSchema, args)),
|
|
1158
|
+
},
|
|
1159
|
+
get_space_color_scheme_type: {
|
|
1160
|
+
description: 'Get whether a space uses the instance default color scheme ("global") or its own ("custom").',
|
|
1161
|
+
inputSchema: {
|
|
1162
|
+
type: "object",
|
|
1163
|
+
properties: { spaceKey: { type: "string" } },
|
|
1164
|
+
required: ["spaceKey"],
|
|
1165
|
+
},
|
|
1166
|
+
handler: (server, args) => getSpaceColorSchemeType(server.requireUserClient(), parseArgs(GetSpaceColorSchemeTypeArgsSchema, args)),
|
|
1167
|
+
},
|
|
1168
|
+
update_space_color_scheme_type: {
|
|
1169
|
+
description: 'Set a space to use the instance default color scheme ("global") or its own ("custom").',
|
|
1170
|
+
inputSchema: {
|
|
1171
|
+
type: "object",
|
|
1172
|
+
properties: { spaceKey: { type: "string" }, type: { type: "string" } },
|
|
1173
|
+
required: ["spaceKey", "type"],
|
|
1174
|
+
},
|
|
1175
|
+
handler: (server, args) => updateSpaceColorSchemeType(server.requireUserClient(), parseArgs(UpdateSpaceColorSchemeTypeArgsSchema, args)),
|
|
1176
|
+
},
|
|
1177
|
+
get_access_mode: {
|
|
1178
|
+
description: "Get the instance's access mode (e.g. read-only maintenance mode status).",
|
|
1179
|
+
inputSchema: { type: "object", properties: {} },
|
|
1180
|
+
handler: (server, args) => getAccessMode(server.requireUserClient(), parseArgs(GetAccessModeArgsSchema, args ?? {})),
|
|
1181
|
+
},
|
|
1182
|
+
admin_list_groups: {
|
|
1183
|
+
description: "List all groups on the instance.",
|
|
1184
|
+
inputSchema: { type: "object", properties: {} },
|
|
1185
|
+
requiresAdmin: true,
|
|
1186
|
+
handler: (server, args) => listGroups(server.requireAdminClient(), parseArgs(ListGroupsArgsSchema, args ?? {})),
|
|
1187
|
+
},
|
|
1188
|
+
admin_get_group: {
|
|
1189
|
+
description: "Get a group by name.",
|
|
1190
|
+
inputSchema: {
|
|
1191
|
+
type: "object",
|
|
1192
|
+
properties: { groupName: { type: "string" } },
|
|
1193
|
+
required: ["groupName"],
|
|
1194
|
+
},
|
|
1195
|
+
requiresAdmin: true,
|
|
1196
|
+
handler: (server, args) => getGroup(server.requireAdminClient(), parseArgs(GetGroupArgsSchema, args)),
|
|
1197
|
+
},
|
|
1198
|
+
admin_get_group_ancestors: {
|
|
1199
|
+
description: "Get a group's ancestor groups (groups it is nested within).",
|
|
1200
|
+
inputSchema: {
|
|
1201
|
+
type: "object",
|
|
1202
|
+
properties: { groupName: { type: "string" } },
|
|
1203
|
+
required: ["groupName"],
|
|
1204
|
+
},
|
|
1205
|
+
requiresAdmin: true,
|
|
1206
|
+
handler: (server, args) => getGroupAncestors(server.requireAdminClient(), parseArgs(GetGroupAncestorsArgsSchema, args)),
|
|
1207
|
+
},
|
|
1208
|
+
admin_get_group_nested_members: {
|
|
1209
|
+
description: "Get a group's members, including members inherited from nested sub-groups.",
|
|
1210
|
+
inputSchema: {
|
|
1211
|
+
type: "object",
|
|
1212
|
+
properties: { groupName: { type: "string" } },
|
|
1213
|
+
required: ["groupName"],
|
|
1214
|
+
},
|
|
1215
|
+
requiresAdmin: true,
|
|
1216
|
+
handler: (server, args) => getGroupNestedMembers(server.requireAdminClient(), parseArgs(GetGroupNestedMembersArgsSchema, args)),
|
|
1217
|
+
},
|
|
1218
|
+
admin_get_group_parents: {
|
|
1219
|
+
description: "Get the groups that directly nest a given group.",
|
|
1220
|
+
inputSchema: {
|
|
1221
|
+
type: "object",
|
|
1222
|
+
properties: { groupName: { type: "string" } },
|
|
1223
|
+
required: ["groupName"],
|
|
1224
|
+
},
|
|
1225
|
+
requiresAdmin: true,
|
|
1226
|
+
handler: (server, args) => getGroupParents(server.requireAdminClient(), parseArgs(GetGroupParentsArgsSchema, args)),
|
|
1227
|
+
},
|
|
1228
|
+
admin_get_group_members: {
|
|
1229
|
+
description: "Get a group's direct members (not including nested sub-group members).",
|
|
1230
|
+
inputSchema: {
|
|
1231
|
+
type: "object",
|
|
1232
|
+
properties: { groupName: { type: "string" } },
|
|
1233
|
+
required: ["groupName"],
|
|
1234
|
+
},
|
|
1235
|
+
requiresAdmin: true,
|
|
1236
|
+
handler: (server, args) => getGroupMembers(server.requireAdminClient(), parseArgs(GetGroupMembersArgsSchema, args)),
|
|
1237
|
+
},
|
|
1238
|
+
get_user: {
|
|
1239
|
+
description: "Get a user by username or key. See skill://users-groups for real gotchas across this tool surface.",
|
|
1240
|
+
inputSchema: {
|
|
1241
|
+
type: "object",
|
|
1242
|
+
properties: { username: { type: "string" }, key: { type: "string" } },
|
|
1243
|
+
},
|
|
1244
|
+
handler: (server, args) => getUser(server.requireUserClient(), parseArgs(GetUserArgsSchema, args)),
|
|
1245
|
+
},
|
|
1246
|
+
admin_add_user_to_group: {
|
|
1247
|
+
description: "Add a user to a group.",
|
|
1248
|
+
inputSchema: {
|
|
1249
|
+
type: "object",
|
|
1250
|
+
properties: { username: { type: "string" }, groupName: { type: "string" } },
|
|
1251
|
+
required: ["username", "groupName"],
|
|
1252
|
+
},
|
|
1253
|
+
requiresAdmin: true,
|
|
1254
|
+
handler: (server, args) => addUserToGroup(server.requireAdminClient(), parseArgs(AddUserToGroupArgsSchema, args)),
|
|
1255
|
+
},
|
|
1256
|
+
admin_remove_user_from_group: {
|
|
1257
|
+
description: "Remove a user from a group.",
|
|
1258
|
+
inputSchema: {
|
|
1259
|
+
type: "object",
|
|
1260
|
+
properties: { username: { type: "string" }, groupName: { type: "string" } },
|
|
1261
|
+
required: ["username", "groupName"],
|
|
1262
|
+
},
|
|
1263
|
+
requiresAdmin: true,
|
|
1264
|
+
handler: (server, args) => removeUserFromGroup(server.requireAdminClient(), parseArgs(RemoveUserFromGroupArgsSchema, args)),
|
|
1265
|
+
},
|
|
1266
|
+
get_anonymous_user_info: {
|
|
1267
|
+
description: "Get information about how Confluence represents the anonymous user type.",
|
|
1268
|
+
inputSchema: { type: "object", properties: {} },
|
|
1269
|
+
handler: (server, args) => getAnonymousUserInfo(server.requireUserClient(), parseArgs(GetAnonymousUserInfoArgsSchema, args ?? {})),
|
|
1270
|
+
},
|
|
1271
|
+
get_current_user: {
|
|
1272
|
+
description: "Get the acting user's own account details.",
|
|
1273
|
+
inputSchema: { type: "object", properties: {} },
|
|
1274
|
+
handler: (server, args) => getCurrentUser(server.requireUserClient(), parseArgs(GetCurrentUserArgsSchema, args ?? {})),
|
|
1275
|
+
},
|
|
1276
|
+
update_current_user: {
|
|
1277
|
+
description: "Update the acting user's own full name and/or email. currentPassword is required by Confluence when changing email.",
|
|
1278
|
+
inputSchema: {
|
|
1279
|
+
type: "object",
|
|
1280
|
+
properties: { fullName: { type: "string" }, email: { type: "string" }, currentPassword: { type: "string" } },
|
|
1281
|
+
},
|
|
1282
|
+
handler: (server, args) => updateCurrentUser(server.requireUserClient(), parseArgs(UpdateCurrentUserArgsSchema, args ?? {})),
|
|
1283
|
+
},
|
|
1284
|
+
change_current_user_password: {
|
|
1285
|
+
description: "Change the acting user's own password.",
|
|
1286
|
+
inputSchema: {
|
|
1287
|
+
type: "object",
|
|
1288
|
+
properties: { oldPassword: { type: "string" }, newPassword: { type: "string" } },
|
|
1289
|
+
required: ["oldPassword", "newPassword"],
|
|
1290
|
+
},
|
|
1291
|
+
handler: (server, args) => changeCurrentUserPassword(server.requireUserClient(), parseArgs(ChangeCurrentUserPasswordArgsSchema, args)),
|
|
1292
|
+
},
|
|
1293
|
+
list_users: {
|
|
1294
|
+
description: "List registered users on the instance.",
|
|
1295
|
+
inputSchema: { type: "object", properties: {} },
|
|
1296
|
+
handler: (server, args) => listUsers(server.requireUserClient(), parseArgs(ListUsersArgsSchema, args ?? {})),
|
|
1297
|
+
},
|
|
1298
|
+
get_user_groups: {
|
|
1299
|
+
description: "Get the groups a user belongs to.",
|
|
1300
|
+
inputSchema: {
|
|
1301
|
+
type: "object",
|
|
1302
|
+
properties: { username: { type: "string" }, key: { type: "string" } },
|
|
1303
|
+
},
|
|
1304
|
+
handler: (server, args) => getUserGroups(server.requireUserClient(), parseArgs(GetUserGroupsArgsSchema, args)),
|
|
1305
|
+
},
|
|
1306
|
+
update_user_settings: {
|
|
1307
|
+
description: "Update a user's preference settings (e.g. locale).",
|
|
1308
|
+
inputSchema: {
|
|
1309
|
+
type: "object",
|
|
1310
|
+
properties: { username: { type: "string" }, locale: { type: "string" } },
|
|
1311
|
+
required: ["username"],
|
|
1312
|
+
},
|
|
1313
|
+
handler: (server, args) => updateUserSettings(server.requireUserClient(), parseArgs(UpdateUserSettingsArgsSchema, args)),
|
|
1314
|
+
},
|
|
1315
|
+
remove_content_watcher: {
|
|
1316
|
+
description: "Stop the acting user watching a piece of content.",
|
|
1317
|
+
inputSchema: {
|
|
1318
|
+
type: "object",
|
|
1319
|
+
properties: { contentId: { type: "string" } },
|
|
1320
|
+
required: ["contentId"],
|
|
1321
|
+
},
|
|
1322
|
+
handler: (server, args) => removeContentWatcher(server.requireUserClient(), parseArgs(RemoveContentWatcherArgsSchema, args)),
|
|
1323
|
+
},
|
|
1324
|
+
is_watching_content: {
|
|
1325
|
+
description: "Check whether the acting user is watching a piece of content.",
|
|
1326
|
+
inputSchema: {
|
|
1327
|
+
type: "object",
|
|
1328
|
+
properties: { contentId: { type: "string" } },
|
|
1329
|
+
required: ["contentId"],
|
|
1330
|
+
},
|
|
1331
|
+
handler: (server, args) => isWatchingContent(server.requireUserClient(), parseArgs(IsWatchingContentArgsSchema, args)),
|
|
1332
|
+
},
|
|
1333
|
+
add_content_watcher: {
|
|
1334
|
+
description: "Make the acting user watch a piece of content.",
|
|
1335
|
+
inputSchema: {
|
|
1336
|
+
type: "object",
|
|
1337
|
+
properties: { contentId: { type: "string" } },
|
|
1338
|
+
required: ["contentId"],
|
|
1339
|
+
},
|
|
1340
|
+
handler: (server, args) => addContentWatcher(server.requireUserClient(), parseArgs(AddContentWatcherArgsSchema, args)),
|
|
1341
|
+
},
|
|
1342
|
+
remove_space_watcher: {
|
|
1343
|
+
description: "Stop the acting user watching a space.",
|
|
1344
|
+
inputSchema: {
|
|
1345
|
+
type: "object",
|
|
1346
|
+
properties: { spaceKey: { type: "string" } },
|
|
1347
|
+
required: ["spaceKey"],
|
|
1348
|
+
},
|
|
1349
|
+
handler: (server, args) => removeSpaceWatcher(server.requireUserClient(), parseArgs(RemoveSpaceWatcherArgsSchema, args)),
|
|
1350
|
+
},
|
|
1351
|
+
is_watching_space: {
|
|
1352
|
+
description: "Check whether the acting user is watching a space.",
|
|
1353
|
+
inputSchema: {
|
|
1354
|
+
type: "object",
|
|
1355
|
+
properties: { spaceKey: { type: "string" } },
|
|
1356
|
+
required: ["spaceKey"],
|
|
1357
|
+
},
|
|
1358
|
+
handler: (server, args) => isWatchingSpace(server.requireUserClient(), parseArgs(IsWatchingSpaceArgsSchema, args)),
|
|
1359
|
+
},
|
|
1360
|
+
add_space_watcher: {
|
|
1361
|
+
description: "Make the acting user watch a space.",
|
|
1362
|
+
inputSchema: {
|
|
1363
|
+
type: "object",
|
|
1364
|
+
properties: { spaceKey: { type: "string" } },
|
|
1365
|
+
required: ["spaceKey"],
|
|
1366
|
+
},
|
|
1367
|
+
handler: (server, args) => addSpaceWatcher(server.requireUserClient(), parseArgs(AddSpaceWatcherArgsSchema, args)),
|
|
1368
|
+
},
|
|
1369
|
+
admin_create_group: {
|
|
1370
|
+
description: "Create a new group.",
|
|
1371
|
+
inputSchema: {
|
|
1372
|
+
type: "object",
|
|
1373
|
+
properties: { name: { type: "string" } },
|
|
1374
|
+
required: ["name"],
|
|
1375
|
+
},
|
|
1376
|
+
requiresAdmin: true,
|
|
1377
|
+
handler: (server, args) => adminCreateGroup(server.requireAdminClient(), parseArgs(AdminCreateGroupArgsSchema, args)),
|
|
1378
|
+
},
|
|
1379
|
+
admin_delete_group: {
|
|
1380
|
+
description: "Permanently delete a group. DESTRUCTIVE — members lose whatever access this group granted.",
|
|
1381
|
+
inputSchema: {
|
|
1382
|
+
type: "object",
|
|
1383
|
+
properties: { groupName: { type: "string" } },
|
|
1384
|
+
required: ["groupName"],
|
|
1385
|
+
},
|
|
1386
|
+
requiresAdmin: true,
|
|
1387
|
+
handler: (server, args) => adminDeleteGroup(server.requireAdminClient(), parseArgs(AdminDeleteGroupArgsSchema, args)),
|
|
1388
|
+
},
|
|
1389
|
+
admin_create_personal_space_for_user: {
|
|
1390
|
+
description: "Create the personal space for a given user (admin-initiated, vs. create_personal_space which creates the acting user's own).",
|
|
1391
|
+
inputSchema: {
|
|
1392
|
+
type: "object",
|
|
1393
|
+
properties: { username: { type: "string" }, description: { type: "string" }, isPrivate: { type: "boolean" } },
|
|
1394
|
+
required: ["username"],
|
|
1395
|
+
},
|
|
1396
|
+
requiresAdmin: true,
|
|
1397
|
+
handler: (server, args) => adminCreatePersonalSpaceForUser(server.requireAdminClient(), parseArgs(AdminCreatePersonalSpaceForUserArgsSchema, args)),
|
|
1398
|
+
},
|
|
1399
|
+
admin_create_user: {
|
|
1400
|
+
description: "Create a new user account. Omit password to require the user to set their own via an emailed link.",
|
|
1401
|
+
inputSchema: {
|
|
1402
|
+
type: "object",
|
|
1403
|
+
properties: {
|
|
1404
|
+
userName: { type: "string" },
|
|
1405
|
+
fullName: { type: "string" },
|
|
1406
|
+
email: { type: "string" },
|
|
1407
|
+
password: { type: "string" },
|
|
1408
|
+
notifyViaEmail: { type: "boolean" },
|
|
1409
|
+
},
|
|
1410
|
+
required: ["userName", "fullName", "email"],
|
|
1411
|
+
},
|
|
1412
|
+
requiresAdmin: true,
|
|
1413
|
+
handler: (server, args) => adminCreateUser(server.requireAdminClient(), parseArgs(AdminCreateUserArgsSchema, args)),
|
|
1414
|
+
},
|
|
1415
|
+
admin_delete_user: {
|
|
1416
|
+
description: "Permanently delete a user account. DESTRUCTIVE. Does not delete their personal space " +
|
|
1417
|
+
"(confirmed live) — it's left behind at ~<username>; delete it separately with delete_space if wanted.",
|
|
1418
|
+
inputSchema: {
|
|
1419
|
+
type: "object",
|
|
1420
|
+
properties: { username: { type: "string" } },
|
|
1421
|
+
required: ["username"],
|
|
1422
|
+
},
|
|
1423
|
+
requiresAdmin: true,
|
|
1424
|
+
handler: (server, args) => adminDeleteUser(server.requireAdminClient(), parseArgs(AdminDeleteUserArgsSchema, args)),
|
|
1425
|
+
},
|
|
1426
|
+
admin_update_user: {
|
|
1427
|
+
description: "Update another user's full name and/or email.",
|
|
1428
|
+
inputSchema: {
|
|
1429
|
+
type: "object",
|
|
1430
|
+
properties: { username: { type: "string" }, fullName: { type: "string" }, email: { type: "string" } },
|
|
1431
|
+
required: ["username"],
|
|
1432
|
+
},
|
|
1433
|
+
requiresAdmin: true,
|
|
1434
|
+
handler: (server, args) => adminUpdateUser(server.requireAdminClient(), parseArgs(AdminUpdateUserArgsSchema, args)),
|
|
1435
|
+
},
|
|
1436
|
+
admin_disable_user: {
|
|
1437
|
+
description: "Disable a user account, blocking login without deleting the account or its content.",
|
|
1438
|
+
inputSchema: {
|
|
1439
|
+
type: "object",
|
|
1440
|
+
properties: { username: { type: "string" } },
|
|
1441
|
+
required: ["username"],
|
|
1442
|
+
},
|
|
1443
|
+
requiresAdmin: true,
|
|
1444
|
+
handler: (server, args) => adminDisableUser(server.requireAdminClient(), parseArgs(AdminDisableUserArgsSchema, args)),
|
|
1445
|
+
},
|
|
1446
|
+
admin_enable_user: {
|
|
1447
|
+
description: "Re-enable a previously disabled user account.",
|
|
1448
|
+
inputSchema: {
|
|
1449
|
+
type: "object",
|
|
1450
|
+
properties: { username: { type: "string" } },
|
|
1451
|
+
required: ["username"],
|
|
1452
|
+
},
|
|
1453
|
+
requiresAdmin: true,
|
|
1454
|
+
handler: (server, args) => adminEnableUser(server.requireAdminClient(), parseArgs(AdminEnableUserArgsSchema, args)),
|
|
1455
|
+
},
|
|
1456
|
+
admin_change_user_password: {
|
|
1457
|
+
description: "Set another user's password.",
|
|
1458
|
+
inputSchema: {
|
|
1459
|
+
type: "object",
|
|
1460
|
+
properties: { username: { type: "string" }, password: { type: "string" } },
|
|
1461
|
+
required: ["username", "password"],
|
|
1462
|
+
},
|
|
1463
|
+
requiresAdmin: true,
|
|
1464
|
+
handler: (server, args) => adminChangeUserPassword(server.requireAdminClient(), parseArgs(AdminChangeUserPasswordArgsSchema, args)),
|
|
1465
|
+
},
|
|
1466
|
+
admin_list_active_users: {
|
|
1467
|
+
description: "List all active (non-disabled) user accounts.",
|
|
1468
|
+
inputSchema: { type: "object", properties: {} },
|
|
1469
|
+
requiresAdmin: true,
|
|
1470
|
+
handler: (server, args) => adminListActiveUsers(server.requireAdminClient(), parseArgs(AdminListActiveUsersArgsSchema, args ?? {})),
|
|
1471
|
+
},
|
|
1472
|
+
admin_list_webhooks: {
|
|
1473
|
+
description: "List registered webhooks, optionally filtered by event type. See skill://webhooks for real gotchas across this tool surface.",
|
|
1474
|
+
inputSchema: {
|
|
1475
|
+
type: "object",
|
|
1476
|
+
properties: { event: { type: "string" } },
|
|
1477
|
+
},
|
|
1478
|
+
requiresAdmin: true,
|
|
1479
|
+
handler: (server, args) => adminListWebhooks(server.requireAdminClient(), parseArgs(AdminListWebhooksArgsSchema, args ?? {})),
|
|
1480
|
+
},
|
|
1481
|
+
admin_create_webhook: {
|
|
1482
|
+
description: 'Create a new webhook. events lists what triggers it, e.g. ["page_created", "page_updated"].',
|
|
1483
|
+
inputSchema: {
|
|
1484
|
+
type: "object",
|
|
1485
|
+
properties: {
|
|
1486
|
+
name: { type: "string" },
|
|
1487
|
+
url: { type: "string" },
|
|
1488
|
+
events: { type: "array", items: { type: "string" } },
|
|
1489
|
+
active: { type: "boolean" },
|
|
1490
|
+
},
|
|
1491
|
+
required: ["name", "url", "events"],
|
|
1492
|
+
},
|
|
1493
|
+
requiresAdmin: true,
|
|
1494
|
+
handler: (server, args) => adminCreateWebhook(server.requireAdminClient(), parseArgs(AdminCreateWebhookArgsSchema, args)),
|
|
1495
|
+
},
|
|
1496
|
+
admin_delete_webhook: {
|
|
1497
|
+
description: "Permanently delete a webhook.",
|
|
1498
|
+
inputSchema: {
|
|
1499
|
+
type: "object",
|
|
1500
|
+
properties: { webhookId: { type: "string" } },
|
|
1501
|
+
required: ["webhookId"],
|
|
1502
|
+
},
|
|
1503
|
+
requiresAdmin: true,
|
|
1504
|
+
handler: (server, args) => adminDeleteWebhook(server.requireAdminClient(), parseArgs(AdminDeleteWebhookArgsSchema, args)),
|
|
1505
|
+
},
|
|
1506
|
+
admin_get_webhook: {
|
|
1507
|
+
description: "Get a webhook by ID.",
|
|
1508
|
+
inputSchema: {
|
|
1509
|
+
type: "object",
|
|
1510
|
+
properties: { webhookId: { type: "string" } },
|
|
1511
|
+
required: ["webhookId"],
|
|
1512
|
+
},
|
|
1513
|
+
requiresAdmin: true,
|
|
1514
|
+
handler: (server, args) => adminGetWebhook(server.requireAdminClient(), parseArgs(AdminGetWebhookArgsSchema, args)),
|
|
1515
|
+
},
|
|
1516
|
+
admin_update_webhook: {
|
|
1517
|
+
description: "Replace a webhook's configuration. Pass the full desired configuration (get_webhook first).",
|
|
1518
|
+
inputSchema: {
|
|
1519
|
+
type: "object",
|
|
1520
|
+
properties: {
|
|
1521
|
+
webhookId: { type: "string" },
|
|
1522
|
+
name: { type: "string" },
|
|
1523
|
+
url: { type: "string" },
|
|
1524
|
+
events: { type: "array", items: { type: "string" } },
|
|
1525
|
+
active: { type: "boolean" },
|
|
1526
|
+
},
|
|
1527
|
+
required: ["webhookId", "name", "url", "events"],
|
|
1528
|
+
},
|
|
1529
|
+
requiresAdmin: true,
|
|
1530
|
+
handler: (server, args) => adminUpdateWebhook(server.requireAdminClient(), parseArgs(AdminUpdateWebhookArgsSchema, args)),
|
|
1531
|
+
},
|
|
1532
|
+
admin_get_webhook_latest_invocations: {
|
|
1533
|
+
description: "Get a webhook's most recent invocation attempts.",
|
|
1534
|
+
inputSchema: {
|
|
1535
|
+
type: "object",
|
|
1536
|
+
properties: { webhookId: { type: "string" } },
|
|
1537
|
+
required: ["webhookId"],
|
|
1538
|
+
},
|
|
1539
|
+
requiresAdmin: true,
|
|
1540
|
+
handler: (server, args) => adminGetWebhookLatestInvocations(server.requireAdminClient(), parseArgs(AdminGetWebhookLatestInvocationsArgsSchema, args)),
|
|
1541
|
+
},
|
|
1542
|
+
admin_get_webhook_statistics: {
|
|
1543
|
+
description: "Get a webhook's invocation statistics.",
|
|
1544
|
+
inputSchema: {
|
|
1545
|
+
type: "object",
|
|
1546
|
+
properties: { webhookId: { type: "string" } },
|
|
1547
|
+
required: ["webhookId"],
|
|
1548
|
+
},
|
|
1549
|
+
requiresAdmin: true,
|
|
1550
|
+
handler: (server, args) => adminGetWebhookStatistics(server.requireAdminClient(), parseArgs(AdminGetWebhookStatisticsArgsSchema, args)),
|
|
1551
|
+
},
|
|
1552
|
+
admin_get_webhook_statistics_summary: {
|
|
1553
|
+
description: "Get a summary of a webhook's invocation statistics.",
|
|
1554
|
+
inputSchema: {
|
|
1555
|
+
type: "object",
|
|
1556
|
+
properties: { webhookId: { type: "string" } },
|
|
1557
|
+
required: ["webhookId"],
|
|
1558
|
+
},
|
|
1559
|
+
requiresAdmin: true,
|
|
1560
|
+
handler: (server, args) => adminGetWebhookStatisticsSummary(server.requireAdminClient(), parseArgs(AdminGetWebhookStatisticsSummaryArgsSchema, args)),
|
|
1561
|
+
},
|
|
1562
|
+
admin_test_webhook: {
|
|
1563
|
+
description: "Send a test payload to a URL to verify it can receive webhook calls, without creating a real webhook.",
|
|
1564
|
+
inputSchema: {
|
|
1565
|
+
type: "object",
|
|
1566
|
+
properties: { url: { type: "string" } },
|
|
1567
|
+
required: ["url"],
|
|
1568
|
+
},
|
|
1569
|
+
requiresAdmin: true,
|
|
1570
|
+
handler: (server, args) => adminTestWebhook(server.requireAdminClient(), parseArgs(AdminTestWebhookArgsSchema, args)),
|
|
1571
|
+
},
|
|
1572
|
+
admin_create_site_backup_job: {
|
|
1573
|
+
description: "Start an instance-wide backup job. Asynchronous — poll with admin_get_backup_restore_job. " +
|
|
1574
|
+
"See skill://instance-maintenance for real gotchas across this tool surface, including which " +
|
|
1575
|
+
"operations here are genuinely irreversible.",
|
|
1576
|
+
inputSchema: {
|
|
1577
|
+
type: "object",
|
|
1578
|
+
properties: {
|
|
1579
|
+
skipAttachments: { type: "boolean" },
|
|
1580
|
+
keepPermanently: { type: "boolean" },
|
|
1581
|
+
fileNamePrefix: { type: "string" },
|
|
1582
|
+
},
|
|
1583
|
+
},
|
|
1584
|
+
requiresAdmin: true,
|
|
1585
|
+
handler: (server, args) => adminCreateSiteBackupJob(server.requireAdminClient(), parseArgs(AdminCreateSiteBackupJobArgsSchema, args ?? {})),
|
|
1586
|
+
},
|
|
1587
|
+
admin_create_space_backup_job: {
|
|
1588
|
+
description: "Start a backup job for one or more spaces. Asynchronous — poll with admin_get_backup_restore_job.",
|
|
1589
|
+
inputSchema: {
|
|
1590
|
+
type: "object",
|
|
1591
|
+
properties: {
|
|
1592
|
+
spaceKeys: { type: "array", items: { type: "string" } },
|
|
1593
|
+
keepPermanently: { type: "boolean" },
|
|
1594
|
+
fileNamePrefix: { type: "string" },
|
|
1595
|
+
},
|
|
1596
|
+
required: ["spaceKeys"],
|
|
1597
|
+
},
|
|
1598
|
+
requiresAdmin: true,
|
|
1599
|
+
handler: (server, args) => adminCreateSpaceBackupJob(server.requireAdminClient(), parseArgs(AdminCreateSpaceBackupJobArgsSchema, args)),
|
|
1600
|
+
},
|
|
1601
|
+
admin_find_backup_restore_jobs: {
|
|
1602
|
+
description: "Search backup/restore jobs by owner, space, scope, or operation type. Pass at least " +
|
|
1603
|
+
"jobScope or jobOperation — confirmed live, with neither this returns an empty list even " +
|
|
1604
|
+
"when real jobs exist.",
|
|
1605
|
+
inputSchema: {
|
|
1606
|
+
type: "object",
|
|
1607
|
+
properties: {
|
|
1608
|
+
owner: { type: "string" },
|
|
1609
|
+
spaceKey: { type: "string" },
|
|
1610
|
+
jobScope: { type: "string" },
|
|
1611
|
+
jobOperation: { type: "string" },
|
|
1612
|
+
},
|
|
1613
|
+
},
|
|
1614
|
+
requiresAdmin: true,
|
|
1615
|
+
handler: (server, args) => adminFindBackupRestoreJobs(server.requireAdminClient(), parseArgs(AdminFindBackupRestoreJobsArgsSchema, args ?? {})),
|
|
1616
|
+
},
|
|
1617
|
+
admin_get_backup_restore_job: {
|
|
1618
|
+
description: "Get a backup/restore job's status by ID.",
|
|
1619
|
+
inputSchema: {
|
|
1620
|
+
type: "object",
|
|
1621
|
+
properties: { jobId: { type: "string" } },
|
|
1622
|
+
required: ["jobId"],
|
|
1623
|
+
},
|
|
1624
|
+
requiresAdmin: true,
|
|
1625
|
+
handler: (server, args) => adminGetBackupRestoreJob(server.requireAdminClient(), parseArgs(AdminGetBackupRestoreJobArgsSchema, args)),
|
|
1626
|
+
},
|
|
1627
|
+
admin_cancel_backup_restore_job: {
|
|
1628
|
+
description: "Cancel a running or queued backup/restore job.",
|
|
1629
|
+
inputSchema: {
|
|
1630
|
+
type: "object",
|
|
1631
|
+
properties: { jobId: { type: "string" } },
|
|
1632
|
+
required: ["jobId"],
|
|
1633
|
+
},
|
|
1634
|
+
requiresAdmin: true,
|
|
1635
|
+
handler: (server, args) => adminCancelBackupRestoreJob(server.requireAdminClient(), parseArgs(AdminCancelBackupRestoreJobArgsSchema, args)),
|
|
1636
|
+
},
|
|
1637
|
+
admin_download_backup_file: {
|
|
1638
|
+
description: "Download a completed backup job's file. Inlined as base64 if small; otherwise only size/type " +
|
|
1639
|
+
"metadata is returned (backup files can be many megabytes — never embedded wholesale).",
|
|
1640
|
+
inputSchema: {
|
|
1641
|
+
type: "object",
|
|
1642
|
+
properties: { jobId: { type: "string" } },
|
|
1643
|
+
required: ["jobId"],
|
|
1644
|
+
},
|
|
1645
|
+
requiresAdmin: true,
|
|
1646
|
+
handler: (server, args) => adminDownloadBackupFile(server.requireAdminClient(), parseArgs(AdminDownloadBackupFileArgsSchema, args)),
|
|
1647
|
+
},
|
|
1648
|
+
admin_cancel_all_queued_backup_restore_jobs: {
|
|
1649
|
+
description: "Cancel every currently queued (not yet running) backup/restore job.",
|
|
1650
|
+
inputSchema: { type: "object", properties: {} },
|
|
1651
|
+
requiresAdmin: true,
|
|
1652
|
+
handler: (server, args) => adminCancelAllQueuedBackupRestoreJobs(server.requireAdminClient(), parseArgs(AdminCancelAllQueuedBackupRestoreJobsArgsSchema, args ?? {})),
|
|
1653
|
+
},
|
|
1654
|
+
admin_list_restore_files: {
|
|
1655
|
+
description: "List backup files available in the server's restore directory, ready to restore from by filename.",
|
|
1656
|
+
inputSchema: {
|
|
1657
|
+
type: "object",
|
|
1658
|
+
properties: { jobScope: { type: "string" } },
|
|
1659
|
+
},
|
|
1660
|
+
requiresAdmin: true,
|
|
1661
|
+
handler: (server, args) => adminListRestoreFiles(server.requireAdminClient(), parseArgs(AdminListRestoreFilesArgsSchema, args ?? {})),
|
|
1662
|
+
},
|
|
1663
|
+
admin_create_site_restore_job: {
|
|
1664
|
+
description: "Restore the entire instance from a backup file already in the restore directory (see " +
|
|
1665
|
+
"admin_list_restore_files). DESTRUCTIVE — replaces live content with the backup's contents.",
|
|
1666
|
+
inputSchema: {
|
|
1667
|
+
type: "object",
|
|
1668
|
+
properties: { fileName: { type: "string" }, skipReindex: { type: "boolean" } },
|
|
1669
|
+
required: ["fileName"],
|
|
1670
|
+
},
|
|
1671
|
+
requiresAdmin: true,
|
|
1672
|
+
handler: (server, args) => adminCreateSiteRestoreJob(server.requireAdminClient(), parseArgs(AdminCreateSiteRestoreJobArgsSchema, args)),
|
|
1673
|
+
},
|
|
1674
|
+
admin_create_space_restore_job: {
|
|
1675
|
+
description: "Restore a space from a backup file already in the restore directory (see admin_list_restore_files). " +
|
|
1676
|
+
"DESTRUCTIVE — replaces the space's live content with the backup's contents.",
|
|
1677
|
+
inputSchema: {
|
|
1678
|
+
type: "object",
|
|
1679
|
+
properties: { fileName: { type: "string" }, skipReindex: { type: "boolean" } },
|
|
1680
|
+
required: ["fileName"],
|
|
1681
|
+
},
|
|
1682
|
+
requiresAdmin: true,
|
|
1683
|
+
handler: (server, args) => adminCreateSpaceRestoreJob(server.requireAdminClient(), parseArgs(AdminCreateSpaceRestoreJobArgsSchema, args)),
|
|
1684
|
+
},
|
|
1685
|
+
admin_create_site_restore_job_from_upload: {
|
|
1686
|
+
description: "Upload a backup zip and restore the entire instance from it. Content must be base64-encoded. " +
|
|
1687
|
+
"DESTRUCTIVE — replaces live content with the backup's contents.",
|
|
1688
|
+
inputSchema: {
|
|
1689
|
+
type: "object",
|
|
1690
|
+
properties: { filename: { type: "string" }, contentBase64: { type: "string" }, skipReindex: { type: "boolean" } },
|
|
1691
|
+
required: ["filename", "contentBase64"],
|
|
1692
|
+
},
|
|
1693
|
+
requiresAdmin: true,
|
|
1694
|
+
handler: (server, args) => adminCreateSiteRestoreJobFromUpload(server.requireAdminClient(), parseArgs(AdminCreateSiteRestoreJobFromUploadArgsSchema, args)),
|
|
1695
|
+
},
|
|
1696
|
+
admin_create_space_restore_job_from_upload: {
|
|
1697
|
+
description: "Upload a space backup zip and restore that space from it. Content must be base64-encoded. " +
|
|
1698
|
+
"DESTRUCTIVE — replaces the space's live content with the backup's contents.",
|
|
1699
|
+
inputSchema: {
|
|
1700
|
+
type: "object",
|
|
1701
|
+
properties: { filename: { type: "string" }, contentBase64: { type: "string" }, skipReindex: { type: "boolean" } },
|
|
1702
|
+
required: ["filename", "contentBase64"],
|
|
1703
|
+
},
|
|
1704
|
+
requiresAdmin: true,
|
|
1705
|
+
handler: (server, args) => adminCreateSpaceRestoreJobFromUpload(server.requireAdminClient(), parseArgs(AdminCreateSpaceRestoreJobFromUploadArgsSchema, args)),
|
|
1706
|
+
},
|
|
1707
|
+
get_reindex_status: {
|
|
1708
|
+
description: "Get the search index rebuild's current status.",
|
|
1709
|
+
inputSchema: { type: "object", properties: {} },
|
|
1710
|
+
handler: (server, args) => getReindexStatus(server.requireUserClient(), parseArgs(GetReindexStatusArgsSchema, args ?? {})),
|
|
1711
|
+
},
|
|
1712
|
+
trigger_reindex: {
|
|
1713
|
+
description: "Rebuild the search index (instance-wide, or one space if spaceKey is given). Resource-" +
|
|
1714
|
+
"intensive and disrupts search while running. Requires confirm: true. See " +
|
|
1715
|
+
"skill://instance-maintenance for real gotchas across this tool surface.",
|
|
1716
|
+
inputSchema: {
|
|
1717
|
+
type: "object",
|
|
1718
|
+
properties: { confirm: { type: "boolean" }, spaceKey: { type: "string" } },
|
|
1719
|
+
required: ["confirm"],
|
|
1720
|
+
},
|
|
1721
|
+
handler: (server, args) => triggerReindex(server.requireUserClient(), parseArgs(TriggerReindexArgsSchema, args)),
|
|
1722
|
+
},
|
|
1723
|
+
reset_reindex_job: {
|
|
1724
|
+
description: "Reset a stuck or errored reindex job's status.",
|
|
1725
|
+
inputSchema: { type: "object", properties: {} },
|
|
1726
|
+
handler: (server, args) => resetReindexJob(server.requireUserClient(), parseArgs(ResetReindexJobArgsSchema, args ?? {})),
|
|
1727
|
+
},
|
|
1728
|
+
unindex_all_content: {
|
|
1729
|
+
description: "Remove ALL content from the search index. Search returns nothing until trigger_reindex " +
|
|
1730
|
+
"completes. Requires confirm: true.",
|
|
1731
|
+
inputSchema: {
|
|
1732
|
+
type: "object",
|
|
1733
|
+
properties: { confirm: { type: "boolean" } },
|
|
1734
|
+
required: ["confirm"],
|
|
1735
|
+
},
|
|
1736
|
+
handler: (server, args) => unindexAllContent(server.requireUserClient(), parseArgs(UnindexAllContentArgsSchema, args)),
|
|
1737
|
+
},
|
|
1738
|
+
admin_get_audit_records: {
|
|
1739
|
+
description: "Get instance audit log records.",
|
|
1740
|
+
inputSchema: { type: "object", properties: {} },
|
|
1741
|
+
requiresAdmin: true,
|
|
1742
|
+
handler: (server, args) => adminGetAuditRecords(server.requireAdminClient(), parseArgs(AdminGetAuditRecordsArgsSchema, args ?? {})),
|
|
1743
|
+
},
|
|
1744
|
+
admin_get_cluster_node_statuses: {
|
|
1745
|
+
description: "Get the status of each node in a Data Center cluster (single-node instances return one entry).",
|
|
1746
|
+
inputSchema: { type: "object", properties: {} },
|
|
1747
|
+
requiresAdmin: true,
|
|
1748
|
+
handler: (server, args) => adminGetClusterNodeStatuses(server.requireAdminClient(), parseArgs(AdminGetClusterNodeStatusesArgsSchema, args ?? {})),
|
|
1749
|
+
},
|
|
1750
|
+
get_instance_metrics: {
|
|
1751
|
+
description: "Get instance-wide usage metrics (e.g. user/space/content counts).",
|
|
1752
|
+
inputSchema: { type: "object", properties: {} },
|
|
1753
|
+
handler: (server, args) => getInstanceMetrics(server.requireUserClient(), parseArgs(GetInstanceMetricsArgsSchema, args ?? {})),
|
|
1754
|
+
},
|
|
1755
|
+
admin_list_long_tasks: {
|
|
1756
|
+
description: "List currently running or recently completed long-running background tasks.",
|
|
1757
|
+
inputSchema: { type: "object", properties: {} },
|
|
1758
|
+
requiresAdmin: true,
|
|
1759
|
+
handler: (server, args) => adminListLongTasks(server.requireAdminClient(), parseArgs(AdminListLongTasksArgsSchema, args ?? {})),
|
|
1760
|
+
},
|
|
1761
|
+
admin_get_long_task: {
|
|
1762
|
+
description: "Get a long-running background task's status by ID.",
|
|
1763
|
+
inputSchema: {
|
|
1764
|
+
type: "object",
|
|
1765
|
+
properties: { id: { type: "string" } },
|
|
1766
|
+
required: ["id"],
|
|
1767
|
+
},
|
|
1768
|
+
requiresAdmin: true,
|
|
1769
|
+
handler: (server, args) => adminGetLongTask(server.requireAdminClient(), parseArgs(AdminGetLongTaskArgsSchema, args)),
|
|
1770
|
+
},
|
|
1771
|
+
search_entities: {
|
|
1772
|
+
description: "Search across all entity types (content, spaces, users) using CQL — broader than " +
|
|
1773
|
+
"search_content, which is content-only. See skill://system for real gotchas across this " +
|
|
1774
|
+
"tool surface." + UNTRUSTED_CONTENT_NOTE,
|
|
1775
|
+
inputSchema: {
|
|
1776
|
+
type: "object",
|
|
1777
|
+
properties: {
|
|
1778
|
+
cql: { type: "string" },
|
|
1779
|
+
limit: { type: "number" },
|
|
1780
|
+
includeArchivedSpaces: { type: "boolean" },
|
|
1781
|
+
},
|
|
1782
|
+
required: ["cql"],
|
|
1783
|
+
},
|
|
1784
|
+
handler: (server, args) => searchEntities(server.requireUserClient(), parseArgs(SearchEntitiesArgsSchema, args)),
|
|
1785
|
+
},
|
|
1786
|
+
get_server_information: {
|
|
1787
|
+
description: "Get Confluence server version and build information.",
|
|
1788
|
+
inputSchema: { type: "object", properties: {} },
|
|
1789
|
+
handler: (server, args) => getServerInformation(server.requireUserClient(), parseArgs(GetServerInformationArgsSchema, args ?? {})),
|
|
1790
|
+
},
|
|
1791
|
+
get_api_references: {
|
|
1792
|
+
description: "Get references to Confluence DC API documentation and implemented endpoints.",
|
|
1793
|
+
inputSchema: {
|
|
1794
|
+
type: "object",
|
|
1795
|
+
properties: {
|
|
1796
|
+
category: { type: "string", enum: ["user", "admin"], description: "Omit for a category overview." },
|
|
1797
|
+
tag: { type: "string" },
|
|
1798
|
+
search: { type: "string" },
|
|
1799
|
+
},
|
|
1800
|
+
},
|
|
1801
|
+
handler: (server, args) => server.handleGetApiReferences(args),
|
|
1802
|
+
},
|
|
1803
|
+
};
|
|
1804
|
+
/**
|
|
1805
|
+
* Pure filter used by the ListTools handler — admin-flagged tools are dropped entirely from the
|
|
1806
|
+
* advertised tool list when no admin client is configured, not just rejected at call time.
|
|
1807
|
+
*/
|
|
1808
|
+
export function listableToolEntries(adminAvailable) {
|
|
1809
|
+
return Object.entries(TOOL_DEFINITIONS).filter(([, def]) => !def.requiresAdmin || adminAvailable);
|
|
1810
|
+
}
|
|
1811
|
+
//# sourceMappingURL=tool-definitions.js.map
|