Skip to main content
Glama
dkmaker

mcp-function-app-tester

test_endpoint

Test and analyze Azure Function App endpoints by simulating HTTP methods (GET, POST, PUT, DELETE) and inspecting detailed responses. Prepends the base URL http://localhost:7071/api for easy endpoint validation.

Instructions

Test a Function App endpoint and get detailed response information. The endpoint will be prepended to the base url which is: http://localhost:7071/api

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
bodyNoOptional request body for POST/PUT requests
endpointYesEndpoint path (e.g. "/users"). Will be appended to base URL.
headersNoOptional request headers
methodYesHTTP method to use

Implementation Reference

  • The MCP CallToolRequestSchema handler that dispatches to and implements the 'test_endpoint' tool. It validates arguments, configures an Axios request with authentication, normalizes the endpoint, executes the HTTP request, and returns a formatted response including status, headers, and body.
    this.server.setRequestHandler(CallToolRequestSchema, async (request) => { if (request.params.name !== 'test_endpoint') { throw new McpError( ErrorCode.MethodNotFound, `Unknown tool: ${request.params.name}` ); } if (!isValidTestEndpointArgs(request.params.arguments)) { throw new McpError( ErrorCode.InvalidParams, 'Invalid test endpoint arguments' ); } try { const config: AxiosRequestConfig = { method: request.params.arguments.method as Method, url: request.params.arguments.endpoint, headers: request.params.arguments.headers || {}, }; if (['POST', 'PUT'].includes(request.params.arguments.method) && request.params.arguments.body) { config.data = request.params.arguments.body; } // Handle authentication based on environment variables if (hasBasicAuth()) { const base64Credentials = Buffer.from(`${AUTH_BASIC_USERNAME}:${AUTH_BASIC_PASSWORD}`).toString('base64'); config.headers = { ...config.headers, 'Authorization': `Basic ${base64Credentials}` }; } else if (hasBearerAuth()) { config.headers = { ...config.headers, 'Authorization': `Bearer ${AUTH_BEARER}` }; } else if (hasApiKeyAuth()) { config.headers = { ...config.headers, [AUTH_APIKEY_HEADER_NAME as string]: AUTH_APIKEY_VALUE }; } // Ensure endpoint starts with / and remove any trailing slashes const normalizedEndpoint = `/${request.params.arguments.endpoint.replace(/^\/+|\/+$/g, '')}`; config.url = normalizedEndpoint; const response = await this.axiosInstance.request(config); const fullUrl = `${BASE_URL}${normalizedEndpoint}`; return { content: [ { type: 'text', text: JSON.stringify({ url: fullUrl, // Include the actual URL called statusCode: response.status, statusText: response.statusText, headers: response.headers, body: response.data, }, null, 2), }, ], }; } catch (error) { if (axios.isAxiosError(error)) { return { content: [ { type: 'text', text: `Request failed: ${error.message}`, }, ], isError: true, }; } throw error; } });
  • src/index.ts:70-103 (registration)
    Registration of the 'test_endpoint' tool in the ListToolsRequestSchema handler, including name, description, and input schema.
    this.server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: [ { name: 'test_endpoint', description: `Test a Function App endpoint and get detailed response information. The endpoint will be prepended to the base url which is: ${BASE_URL}`, inputSchema: { type: 'object', properties: { method: { type: 'string', enum: ['GET', 'POST', 'PUT', 'DELETE'], description: 'HTTP method to use', }, endpoint: { type: 'string', description: 'Endpoint path (e.g. "/users"). Will be appended to base URL.', }, body: { type: 'object', description: 'Optional request body for POST/PUT requests', }, headers: { type: 'object', description: 'Optional request headers', additionalProperties: { type: 'string', }, }, }, required: ['method', 'endpoint'], }, }, ], }));
  • JSON Schema defining the input parameters for the 'test_endpoint' tool, including method, endpoint, optional body, and headers.
    inputSchema: { type: 'object', properties: { method: { type: 'string', enum: ['GET', 'POST', 'PUT', 'DELETE'], description: 'HTTP method to use', }, endpoint: { type: 'string', description: 'Endpoint path (e.g. "/users"). Will be appended to base URL.', }, body: { type: 'object', description: 'Optional request body for POST/PUT requests', }, headers: { type: 'object', description: 'Optional request headers', additionalProperties: { type: 'string', }, }, }, required: ['method', 'endpoint'], },
  • TypeScript interface defining the expected arguments structure for the 'test_endpoint' tool.
    interface TestEndpointArgs { method: 'GET' | 'POST' | 'PUT' | 'DELETE'; endpoint: string; body?: any; headers?: Record<string, string>; }
  • Type guard function to validate if provided arguments match the TestEndpointArgs interface before executing the tool.
    const isValidTestEndpointArgs = (args: any): args is TestEndpointArgs => { if (typeof args !== 'object' || args === null) return false; if (!['GET', 'POST', 'PUT', 'DELETE'].includes(args.method)) return false; if (typeof args.endpoint !== 'string') return false; if (args.headers !== undefined && typeof args.headers !== 'object') return false; return 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/dkmaker/mcp-function-app-tester'

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