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;
    };

Tool Definition Quality

Score is being calculated. Check back soon.

Install Server

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