| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- import type { ToolSet } from 'ai'
- import { createBrivenMCPClient } from '../briven-mcp'
- import { filterToolsByOptInLevel, toolSetValidationSchema } from '../tool-filter'
- import type { AiOptInLevel } from '@/hooks/misc/useOrgOptedIntoAi'
- const UI_EXECUTED_TOOLS = ['execute_sql', 'deploy_edge_function']
- export const getMcpTools = async ({
- accessToken,
- projectRef,
- aiOptInLevel,
- }: {
- accessToken: string
- projectRef: string
- aiOptInLevel: AiOptInLevel
- }) => {
- // If platform, fetch MCP client and tools which replace old local tools
- const mcpClient = await createBrivenMCPClient({
- accessToken,
- projectId: projectRef,
- })
- const availableMcpTools = (await mcpClient.tools()) as ToolSet
- // Filter tools based on the (potentially modified) AI opt-in level
- const allowedMcpTools = filterToolsByOptInLevel(availableMcpTools, aiOptInLevel)
- // Remove UI-executed tools handled locally
- const filteredMcpTools: ToolSet = { ...allowedMcpTools }
- UI_EXECUTED_TOOLS.forEach((toolName) => {
- delete filteredMcpTools[toolName]
- })
- // Validate that only known tools are provided
- const validation = toolSetValidationSchema.safeParse(filteredMcpTools)
- if (!validation.success) {
- console.error('MCP tools validation error:', validation.error)
- throw new Error('Internal error: MCP tools validation failed')
- }
- return validation.data
- }
|