Skip to main content
Glama

!functions

Explore and manage database functions across PostgreSQL, MySQL, and Firestore with this MCP server tool. Simplify database operation workflows by organizing and executing functions efficiently.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • The handler function for the '!functions' tool. It checks if a database is connected, calls dbService.getFunctions() to retrieve functions, stringifies the result as JSON, and handles errors.
    server.tool( "!functions", {}, async () => { if (!dbService) { return { content: [{ type: "text", text: "You must connect to a database first!" }], isError: true, }; } try { const functions = await dbService.getFunctions(); return { content: [ { type: "text", text: JSON.stringify(functions, null, 2), }, ], }; } catch (error: unknown) { const errorMessage = error instanceof Error ? error.message : 'Unknown error'; return { content: [{ type: "text", text: `Failed to get function information: ${errorMessage}` }], isError: true, }; } } );
  • Core implementation in DatabaseService.getFunctions() that executes database-specific queries to retrieve stored functions from PostgreSQL, MySQL, or returns empty for Firestore.
    async getFunctions(): Promise<FunctionInfo[]> { switch (this.config.type) { case 'postgres': { const query = ` SELECT p.proname as name, l.lanname as language, pg_get_function_result(p.oid) as "returnType", pg_get_function_arguments(p.oid) as arguments, pg_get_functiondef(p.oid) as definition FROM pg_proc p JOIN pg_namespace n ON p.pronamespace = n.oid JOIN pg_language l ON p.prolang = l.oid WHERE n.nspname = 'public'; `; const result = await this.postgresClient!.query(query); return result.rows; } case 'mysql': { const [rows] = await this.mysqlConnection!.query(` SELECT ROUTINE_NAME as name, 'SQL' as language, DTD_IDENTIFIER as returnType, CONCAT_WS(', ', GROUP_CONCAT( CONCAT(PARAMETER_NAME, ' ', DATA_TYPE) ORDER BY ORDINAL_POSITION ) ) as arguments, ROUTINE_DEFINITION as definition FROM information_schema.ROUTINES r LEFT JOIN information_schema.PARAMETERS p ON r.SPECIFIC_NAME = p.SPECIFIC_NAME WHERE r.ROUTINE_SCHEMA = DATABASE() AND r.ROUTINE_TYPE = 'FUNCTION' GROUP BY r.SPECIFIC_NAME; `); return rows; } case 'firestore': { // Firestore does not support stored functions return []; } default: return []; } }
  • TypeScript interface defining the structure of function information returned by the tool.
    export interface FunctionInfo { name: string; language: string; returnType: string; arguments: string; definition: string; }
  • src/index.ts:189-218 (registration)
    Registration of the '!functions' tool on the MCP server using server.tool() with empty input schema.
    server.tool( "!functions", {}, async () => { if (!dbService) { return { content: [{ type: "text", text: "You must connect to a database first!" }], isError: true, }; } try { const functions = await dbService.getFunctions(); return { content: [ { type: "text", text: JSON.stringify(functions, null, 2), }, ], }; } catch (error: unknown) { const errorMessage = error instanceof Error ? error.message : 'Unknown error'; return { content: [{ type: "text", text: `Failed to get function information: ${errorMessage}` }], isError: true, }; } } );

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/wirdes/db-mcp-tool'

If you have feedback or need assistance with the MCP directory API, please join our Discord server