← back to Goodquestion

src/app/api/mcp/search/route.ts

54 lines

import { NextRequest, NextResponse } from 'next/server'
import { mcpClient } from '@/lib/mcp-client'
import { z } from 'zod'

const SearchRequestSchema = z.object({
  query: z.string().min(1),
  filters: z
    .object({
      documentType: z.array(z.string()).optional(),
      dateFrom: z.string().optional(),
      dateTo: z.string().optional(),
      location: z.string().optional(),
    })
    .optional(),
  limit: z.number().int().positive().max(50).default(10),
})

export async function POST(request: NextRequest) {
  try {
    const body = await request.json()
    const { query, filters, limit } = SearchRequestSchema.parse(body)

    const results = await mcpClient.search(query, filters, limit)

    return NextResponse.json({
      success: true,
      results,
      count: results.length,
    })
  } catch (error) {
    console.error('MCP search error:', error)

    if (error instanceof z.ZodError) {
      return NextResponse.json(
        {
          success: false,
          error: 'Invalid search parameters',
          details: error.errors,
        },
        { status: 400 }
      )
    }

    return NextResponse.json(
      {
        success: false,
        error: 'Search failed',
        message: error instanceof Error ? error.message : 'Unknown error',
      },
      { status: 500 }
    )
  }
}