@@ -133,6 +133,14 @@ function formatBlockContent(block: any, indent = 0): string {
133133 }
134134}
135135
136+ function parseNotionId ( rawId : string , fieldName : "page_id" | "database_id" ) {
137+ const normalizedId = rawId . replace ( / - / g, "" ) . trim ( ) ;
138+ if ( ! / ^ [ a - f 0 - 9 ] { 32 } $ / i. test ( normalizedId ) ) {
139+ return { error : `❌ ${ fieldName } must be a valid Notion ID (32 hex characters).` } ;
140+ }
141+ return { value : normalizedId } ;
142+ }
143+
136144// ── Action handlers ───────────────────────────────────────────────────────────
137145
138146async function handleSearch ( params : any ) : Promise < string > {
@@ -177,8 +185,9 @@ async function handleSearch(params: any): Promise<string> {
177185async function handleGet ( params : any ) : Promise < string > {
178186 if ( ! params . page_id ) return "❌ page_id is required for get action." ;
179187
180- // Remove hyphens from page_id if present (Notion accepts both formats)
181- const pageId = params . page_id . replace ( / - / g, "" ) ;
188+ const parsedPageId = parseNotionId ( params . page_id , "page_id" ) ;
189+ if ( parsedPageId . error ) return parsedPageId . error ;
190+ const pageId = parsedPageId . value ;
182191
183192 // Get page metadata
184193 const page = await notionRequest ( `/pages/${ pageId } ` ) ;
@@ -223,7 +232,9 @@ async function handleGet(params: any): Promise<string> {
223232async function handleList ( params : any ) : Promise < string > {
224233 if ( ! params . database_id ) return "❌ database_id is required for list action." ;
225234
226- const databaseId = params . database_id . replace ( / - / g, "" ) ;
235+ const parsedDatabaseId = parseNotionId ( params . database_id , "database_id" ) ;
236+ if ( parsedDatabaseId . error ) return parsedDatabaseId . error ;
237+ const databaseId = parsedDatabaseId . value ;
227238 const limit = Math . min ( params . limit || 20 , 100 ) ;
228239
229240 const body : any = {
@@ -314,7 +325,9 @@ async function handleList(params: any): Promise<string> {
314325async function handleDatabase ( params : any ) : Promise < string > {
315326 if ( ! params . database_id ) return "❌ database_id is required for database action." ;
316327
317- const databaseId = params . database_id . replace ( / - / g, "" ) ;
328+ const parsedDatabaseId = parseNotionId ( params . database_id , "database_id" ) ;
329+ if ( parsedDatabaseId . error ) return parsedDatabaseId . error ;
330+ const databaseId = parsedDatabaseId . value ;
318331
319332 const db = await notionRequest ( `/databases/${ databaseId } ` ) ;
320333
0 commit comments