@aashari/mcp-server-atlassian-confluence
Version:
Node.js/TypeScript MCP server for Atlassian Confluence. Provides tools enabling AI systems (LLMs) to list/get spaces & pages (content formatted as Markdown) and search via CQL. Connects AI seamlessly to Confluence knowledge bases using the standard MCP in
138 lines (137 loc) • 4.97 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SearchResponseSchema = exports.SearchResultSchema = exports.SearchResultUserSchema = exports.SearchResultSpaceSchema = exports.SearchResultContentSchema = exports.SearchResultLinksSchema = exports.SearchResultReferenceSchema = exports.ContentExcerptSchema = exports.GenericContentType = void 0;
const zod_1 = require("zod");
/**
* Valid generic content types for search
*/
var GenericContentType;
(function (GenericContentType) {
GenericContentType["DATABASES"] = "DATABASES";
GenericContentType["EMBEDS"] = "EMBEDS";
GenericContentType["FOLDERS"] = "FOLDERS";
GenericContentType["WHITEBOARDS"] = "WHITEBOARDS";
})(GenericContentType || (exports.GenericContentType = GenericContentType = {}));
/**
* Zod schemas for Confluence API search response types
*/
/**
* Excerpt format schema
*/
// Unused schema - commented out
// export const ExcerptFormatSchema = z.enum([
// 'view', 'plain'
// ]);
/**
* Generic content type schema
*/
// Unused schema - commented out
// export const GenericContentTypeSchema = z.enum([
// 'page', 'blogpost', 'attachment', 'content', 'space'
// ]);
/**
* Content excerpt schema
*/
exports.ContentExcerptSchema = zod_1.z.object({
content: zod_1.z.string(),
highlights: zod_1.z.array(zod_1.z.array(zod_1.z.number())).optional(),
});
/**
* Search result reference schema
*/
exports.SearchResultReferenceSchema = zod_1.z.object({
id: zod_1.z.string(),
type: zod_1.z.string(),
status: zod_1.z.string(),
title: zod_1.z.string(),
});
/**
* Search result links schema
*/
exports.SearchResultLinksSchema = zod_1.z
.object({
webui: zod_1.z.string().optional(),
self: zod_1.z.string().optional(),
})
.optional();
/**
* Search result content schema - made more flexible to accommodate V1 API
*/
exports.SearchResultContentSchema = zod_1.z
.object({
id: zod_1.z.string().optional(),
type: zod_1.z.string().optional(),
status: zod_1.z.string().optional(),
title: zod_1.z.string().optional(),
spaceId: zod_1.z.string().optional(), // Made optional for V1 API
excerpt: exports.ContentExcerptSchema.optional(),
lastModified: zod_1.z.string().optional(),
_links: exports.SearchResultLinksSchema,
})
.passthrough(); // Allow additional properties
/**
* Search result space schema - made more flexible to accommodate V1 API
*/
exports.SearchResultSpaceSchema = zod_1.z
.object({
id: zod_1.z.string().optional(), // Made optional for V1 API
key: zod_1.z.string().optional(), // Made optional for V1 API
name: zod_1.z.string().optional(), // Made optional for V1 API
type: zod_1.z.string().optional(), // Made optional for V1 API
_links: exports.SearchResultLinksSchema,
})
.passthrough(); // Allow additional properties
/**
* Search result user schema
*/
exports.SearchResultUserSchema = zod_1.z
.object({
accountId: zod_1.z.string().optional(),
publicName: zod_1.z.string().optional(),
_links: zod_1.z
.object({
self: zod_1.z.string().optional(),
})
.optional(),
})
.passthrough(); // Allow additional properties
/**
* Search result schema - made more flexible to accommodate both V1 and V2 API
*/
exports.SearchResultSchema = zod_1.z
.object({
content: exports.SearchResultContentSchema.optional(), // Make optional and accept empty object
space: exports.SearchResultSpaceSchema.optional(), // Make optional and accept empty object
user: exports.SearchResultUserSchema.optional(),
container: exports.SearchResultReferenceSchema.optional(),
parentPage: exports.SearchResultReferenceSchema.optional(),
childPages: zod_1.z.array(exports.SearchResultReferenceSchema).optional(),
onboardingPage: zod_1.z.boolean().optional(),
// Add V1-specific fields
title: zod_1.z.string().optional(),
excerpt: zod_1.z.string().optional(),
url: zod_1.z.string().optional(),
resultGlobalContainer: zod_1.z
.object({
title: zod_1.z.string().optional(),
displayUrl: zod_1.z.string().optional(),
})
.optional(),
breadcrumbs: zod_1.z.array(zod_1.z.unknown()).optional(),
entityType: zod_1.z.string().optional(),
iconCssClass: zod_1.z.string().optional(),
lastModified: zod_1.z.string().optional(),
friendlyLastModified: zod_1.z.string().optional(),
score: zod_1.z.number().optional(),
})
.passthrough(); // Allow additional properties
/**
* Search response schema - made more flexible to accommodate both V1 and V2 API
*/
exports.SearchResponseSchema = zod_1.z
.object({
results: zod_1.z.array(exports.SearchResultSchema),
_links: zod_1.z.object({}).passthrough().optional(), // Accept any object structure
total: zod_1.z.number().optional(), // Only included if includeTotalSize is true
})
.passthrough(); // Allow additional properties like start, limit, etc.