Skip to main content
Glama

filter

Filter JSON data by applying conditions to specific JSONPath expressions. Retrieve targeted data from a JSON source URL based on defined criteria, enabling precise data extraction for analysis or manipulation.

Instructions

Filter JSON data using conditions

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
conditionYesFilter condition (e.g. @.price < 10)
jsonPathYesBase JSONPath expression
urlYesURL of the JSON data source

Implementation Reference

  • Handler logic for the 'filter' tool within the CallToolRequestSchema handler. Fetches JSON from URL, extracts base data using jsonPath, and applies filtering based on condition string using inline comparison logic for >, <, >=, <=, ==, != operators.
    const { url, jsonPath, condition } = FilterArgumentsSchema.parse(args); const jsonData = await fetchData(url); // Get base data using jsonPath let baseData = JSONPath.value(jsonData, jsonPath); if (!Array.isArray(baseData)) { baseData = [baseData]; } // Apply filter condition const result = baseData.filter((item: Record<string, any>) => { try { // Handle common comparison operators if (condition.includes(' > ')) { const [field, value] = condition.split(' > ').map(s => s.trim()); const fieldName = field.replace('@.', ''); return Number(item[fieldName]) > Number(value); } if (condition.includes(' < ')) { const [field, value] = condition.split(' < ').map(s => s.trim()); const fieldName = field.replace('@.', ''); return Number(item[fieldName]) < Number(value); } if (condition.includes(' >= ')) { const [field, value] = condition.split(' >= ').map(s => s.trim()); const fieldName = field.replace('@.', ''); return Number(item[fieldName]) >= Number(value); } if (condition.includes(' <= ')) { const [field, value] = condition.split(' <= ').map(s => s.trim()); const fieldName = field.replace('@.', ''); return Number(item[fieldName]) <= Number(value); } if (condition.includes(' == ')) { const [field, value] = condition.split(' == ').map(s => s.trim()); const fieldName = field.replace('@.', ''); const compareValue = value.startsWith('"') || value.startsWith("'") ? value.slice(1, -1) : Number(value); return item[fieldName] == compareValue; } if (condition.includes(' != ')) { const [field, value] = condition.split(' != ').map(s => s.trim()); const fieldName = field.replace('@.', ''); const compareValue = value.startsWith('"') || value.startsWith("'") ? value.slice(1, -1) : Number(value); return item[fieldName] != compareValue; } return false; } catch { return false; } }); return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
  • Zod validation schema for filter tool arguments: url (string URL), jsonPath (string), condition (string). Used to parse inputs in the handler.
    const FilterArgumentsSchema = z.object({ url: z.string().url(), jsonPath: z.string(), condition: z.string(), });
  • src/index.ts:424-444 (registration)
    Tool registration in ListToolsRequestSchema handler. Defines 'filter' tool with name, description, and inputSchema matching the Zod schema.
    name: "filter", description: "Filter JSON data using conditions", inputSchema: { type: "object", properties: { url: { type: "string", description: "URL of the JSON data source", }, jsonPath: { type: "string", description: "Base JSONPath expression", }, condition: { type: "string", description: "Filter condition (e.g. @.price < 10)", } }, required: ["url", "jsonPath", "condition"], }, }

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/GongRzhe/JSON-MCP-Server'

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