UNPKG

systemprompt-mcp-notion

Version:

A specialized Model Context Protocol (MCP) server that integrates Notion into your AI workflows. This server enables seamless access to Notion through MCP, allowing AI agents to interact with pages, databases, and comments.

332 lines (331 loc) 9.43 kB
// Base schema for rich text content export const richTextSchema = { type: "array", items: { type: "object", properties: { type: { type: "string", enum: ["text"] }, text: { type: "object", properties: { content: { type: "string" }, link: { type: ["object", "null"], properties: { url: { type: "string" }, }, }, }, required: ["content"], }, annotations: { type: "object", properties: { bold: { type: "boolean" }, italic: { type: "boolean" }, strikethrough: { type: "boolean" }, underline: { type: "boolean" }, code: { type: "boolean" }, color: { type: "string" }, }, }, plain_text: { type: "string" }, href: { type: ["string", "null"] }, }, required: ["type", "text"], }, }; // Title property schema export const titlePropertySchema = { type: "object", properties: { title: richTextSchema, }, required: ["title"], }; // Text property schema export const textPropertySchema = { type: "object", properties: { rich_text: richTextSchema, }, required: ["rich_text"], }; // Number property schema export const numberPropertySchema = { type: "object", properties: { number: { type: ["number", "null"] }, }, required: ["number"], }; // Select property schema export const selectPropertySchema = { type: "object", properties: { select: { type: ["object", "null"], properties: { id: { type: "string" }, name: { type: "string" }, color: { type: "string" }, }, }, }, required: ["select"], }; // Multi-select property schema export const multiSelectPropertySchema = { type: "object", properties: { multi_select: { type: "array", items: { type: "object", properties: { id: { type: "string" }, name: { type: "string" }, color: { type: "string" }, }, required: ["id", "name"], }, }, }, required: ["multi_select"], }; // Date property schema export const datePropertySchema = { type: "object", properties: { date: { type: ["object", "null"], properties: { start: { type: "string", format: "date-time" }, end: { type: ["string", "null"], format: "date-time" }, time_zone: { type: ["string", "null"] }, }, required: ["start"], }, }, required: ["date"], }; // People property schema export const peoplePropertySchema = { type: "object", properties: { people: { type: "array", items: { type: "object", properties: { id: { type: "string" }, object: { type: "string", enum: ["user"] }, }, required: ["id", "object"], }, }, }, required: ["people"], }; // Files property schema export const filesPropertySchema = { type: "object", properties: { files: { type: "array", items: { type: "object", properties: { name: { type: "string" }, type: { type: "string", enum: ["file", "external"] }, file: { type: "object", properties: { url: { type: "string" }, expiry_time: { type: "string", format: "date-time" }, }, }, external: { type: "object", properties: { url: { type: "string" }, }, }, }, required: ["name", "type"], }, }, }, required: ["files"], }; // Checkbox property schema export const checkboxPropertySchema = { type: "object", properties: { checkbox: { type: "boolean" }, }, required: ["checkbox"], }; // URL property schema export const urlPropertySchema = { type: "object", properties: { url: { type: ["string", "null"] }, }, required: ["url"], }; // Email property schema export const emailPropertySchema = { type: "object", properties: { email: { type: ["string", "null"] }, }, required: ["email"], }; // Phone number property schema export const phoneNumberPropertySchema = { type: "object", properties: { phone_number: { type: ["string", "null"] }, }, required: ["phone_number"], }; // Formula property schema export const formulaPropertySchema = { type: "object", properties: { formula: { type: "object", properties: { type: { type: "string", enum: ["string", "number", "boolean", "date"] }, string: { type: "string" }, number: { type: "number" }, boolean: { type: "boolean" }, date: { type: "object", properties: { start: { type: "string", format: "date-time" }, end: { type: ["string", "null"], format: "date-time" }, }, }, }, required: ["type"], }, }, required: ["formula"], }; // Relation property schema export const relationPropertySchema = { type: "object", properties: { relation: { type: "array", items: { type: "object", properties: { id: { type: "string" }, }, required: ["id"], }, }, }, required: ["relation"], }; // Rollup property schema export const rollupPropertySchema = { type: "object", properties: { rollup: { type: "object", properties: { type: { type: "string", enum: ["number", "date", "array"] }, number: { type: "number" }, date: { type: "object", properties: { start: { type: "string", format: "date-time" }, end: { type: ["string", "null"], format: "date-time" }, }, }, array: { type: "array", items: { type: "object", // The items can be of any property type additionalProperties: true, }, }, }, required: ["type"], }, }, required: ["rollup"], }; // Created time property schema export const createdTimePropertySchema = { type: "object", properties: { created_time: { type: "string", format: "date-time" }, }, required: ["created_time"], }; // Created by property schema export const createdByPropertySchema = { type: "object", properties: { created_by: { type: "object", properties: { id: { type: "string" }, object: { type: "string", enum: ["user"] }, }, required: ["id", "object"], }, }, required: ["created_by"], }; // Last edited time property schema export const lastEditedTimePropertySchema = { type: "object", properties: { last_edited_time: { type: "string", format: "date-time" }, }, required: ["last_edited_time"], }; // Last edited by property schema export const lastEditedByPropertySchema = { type: "object", properties: { last_edited_by: { type: "object", properties: { id: { type: "string" }, object: { type: "string", enum: ["user"] }, }, required: ["id", "object"], }, }, required: ["last_edited_by"], }; // Combined property schemas map export const notionPropertySchemas = { title: titlePropertySchema, rich_text: textPropertySchema, number: numberPropertySchema, select: selectPropertySchema, multi_select: multiSelectPropertySchema, date: datePropertySchema, people: peoplePropertySchema, files: filesPropertySchema, checkbox: checkboxPropertySchema, url: urlPropertySchema, email: emailPropertySchema, phone_number: phoneNumberPropertySchema, formula: formulaPropertySchema, relation: relationPropertySchema, rollup: rollupPropertySchema, created_time: createdTimePropertySchema, created_by: createdByPropertySchema, last_edited_time: lastEditedTimePropertySchema, last_edited_by: lastEditedByPropertySchema, };