SystemPrompt MCP Server
by Ejb503
Verified
- src
- handlers
import { ConfluenceClient } from "../client/confluence-client.js";
import { McpError, ErrorCode } from "@modelcontextprotocol/sdk/types.js";
import type { Page, PaginatedResponse } from "../types/index.js";
export async function handleListPages(
client: ConfluenceClient,
args: { spaceId: string; limit?: number; start?: number }
): Promise<{
content: Array<{ type: "text"; text: string }>;
}> {
try {
if (!args.spaceId) {
throw new McpError(ErrorCode.InvalidParams, "spaceId is required");
}
const pages = await client.getPages(args.spaceId, args.limit, args.start);
const simplified = {
results: pages.results.map(page => ({
id: page.id,
title: page.title,
spaceId: page.spaceId,
version: page.version.number,
parentId: page.parentId || null
})),
next: pages._links.next ? true : false
};
return {
content: [
{
type: "text",
text: JSON.stringify(simplified),
},
],
};
} catch (error) {
console.error("Error listing pages:", error);
throw new McpError(
ErrorCode.InternalError,
`Failed to list pages: ${error instanceof Error ? error.message : String(error)}`
);
}
}
export async function handleGetPage(
client: ConfluenceClient,
args: { pageId: string }
): Promise<{
content: Array<{ type: "text"; text: string }>;
}> {
try {
if (!args.pageId) {
throw new McpError(ErrorCode.InvalidParams, "pageId is required");
}
const page = await client.getPage(args.pageId);
const content = await client.getPageContent(args.pageId);
const simplified = {
id: page.id,
title: page.title,
spaceId: page.spaceId,
version: page.version.number,
parentId: page.parentId || null,
content: content,
url: page._links.webui
};
return {
content: [
{
type: "text",
text: JSON.stringify(simplified),
},
],
};
} catch (error) {
console.error("Error getting page:", error);
if (error instanceof McpError) {
throw error;
}
throw new McpError(
ErrorCode.InternalError,
`Failed to get page: ${error instanceof Error ? error.message : String(error)}`
);
}
}
export async function handleCreatePage(
client: ConfluenceClient,
args: { spaceId: string; title: string; content: string; parentId?: string }
): Promise<{
content: Array<{ type: "text"; text: string }>;
}> {
try {
if (!args.spaceId || !args.title || !args.content) {
throw new McpError(
ErrorCode.InvalidParams,
"spaceId, title, and content are required"
);
}
const page = await client.createPage(
args.spaceId,
args.title,
args.content,
args.parentId
);
const simplified = {
id: page.id,
version: page.version.number,
url: page._links.webui
};
return {
content: [
{
type: "text",
text: JSON.stringify(simplified),
},
],
};
} catch (error) {
console.error("Error creating page:", error);
if (error instanceof McpError) {
throw error;
}
throw new McpError(
ErrorCode.InternalError,
`Failed to create page: ${error instanceof Error ? error.message : String(error)}`
);
}
}
export async function handleUpdatePage(
client: ConfluenceClient,
args: { pageId: string; title: string; content: string; version: number }
): Promise<{
content: Array<{ type: "text"; text: string }>;
}> {
try {
if (!args.pageId || !args.title || !args.content || args.version === undefined) {
throw new McpError(
ErrorCode.InvalidParams,
"pageId, title, content, and version are required"
);
}
const page = await client.updatePage(
args.pageId,
args.title,
args.content,
args.version
);
const simplified = {
id: page.id,
version: page.version.number,
url: page._links.webui
};
return {
content: [
{
type: "text",
text: JSON.stringify(simplified),
},
],
};
} catch (error) {
console.error("Error updating page:", error);
if (error instanceof McpError) {
throw error;
}
throw new McpError(
ErrorCode.InternalError,
`Failed to update page: ${error instanceof Error ? error.message : String(error)}`
);
}
}