Skip to main content
Glama
devlimelabs

Meilisearch MCP Server

by devlimelabs

search

Query a Meilisearch index to retrieve documents, filter results, and customize attributes like sorting, highlighting, and faceting using defined parameters.

Instructions

Search for documents in a Meilisearch index

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
attributesToCropNoAttributes to crop
attributesToHighlightNoAttributes to highlight
attributesToRetrieveNoAttributes to include in results
cropLengthNoLength at which to crop cropped attributes
facetsNoFacets to return
filterNoFilter query to apply
highlightPostTagNoTag to insert after highlighted text
highlightPreTagNoTag to insert before highlighted text
indexUidYesUnique identifier of the index
limitNoMaximum number of results to return (default: 20)
matchingStrategyNoMatching strategy: 'all' or 'last'
offsetNoNumber of results to skip (default: 0)
qYesSearch query
showMatchesPositionNoWhether to include match positions in results
sortNoAttributes to sort by, e.g. ["price:asc"]

Implementation Reference

  • The handler function for the 'search' tool. It takes search parameters, makes a POST request to the Meilisearch /indexes/{indexUid}/search endpoint using apiClient, and returns the JSON response or an error.
    async ({ indexUid, q, limit, offset, filter, sort, facets, attributesToRetrieve, attributesToCrop, cropLength, attributesToHighlight, highlightPreTag, highlightPostTag, showMatchesPosition, matchingStrategy }: SearchParams) => { try { const response = await apiClient.post(`/indexes/${indexUid}/search`, { q, limit, offset, filter, sort, facets, attributesToRetrieve, attributesToCrop, cropLength, attributesToHighlight, highlightPreTag, highlightPostTag, showMatchesPosition, matchingStrategy, }); return { content: [{ type: 'text', text: JSON.stringify(response.data, null, 2) }], }; } catch (error) { return createErrorResponse(error); } }
  • Zod input schema defining parameters for the 'search' tool, including indexUid, query (q), pagination, filters, sorting, facets, and highlighting options.
    { indexUid: z.string().describe('Unique identifier of the index'), q: z.string().describe('Search query'), limit: z.number().min(1).max(1000).optional().describe('Maximum number of results to return (default: 20)'), offset: z.number().min(0).optional().describe('Number of results to skip (default: 0)'), filter: z.string().optional().describe('Filter query to apply'), sort: z.array(z.string()).optional().describe('Attributes to sort by, e.g. ["price:asc"]'), facets: z.array(z.string()).optional().describe('Facets to return'), attributesToRetrieve: z.array(z.string()).optional().describe('Attributes to include in results'), attributesToCrop: z.array(z.string()).optional().describe('Attributes to crop'), cropLength: z.number().optional().describe('Length at which to crop cropped attributes'), attributesToHighlight: z.array(z.string()).optional().describe('Attributes to highlight'), highlightPreTag: z.string().optional().describe('Tag to insert before highlighted text'), highlightPostTag: z.string().optional().describe('Tag to insert after highlighted text'), showMatchesPosition: z.boolean().optional().describe('Whether to include match positions in results'), matchingStrategy: z.string().optional().describe("Matching strategy: 'all' or 'last'"), },
  • The server.tool call that registers the 'search' tool with its name, description, input schema, and handler function.
    server.tool( 'search', 'Search for documents in a Meilisearch index', { indexUid: z.string().describe('Unique identifier of the index'), q: z.string().describe('Search query'), limit: z.number().min(1).max(1000).optional().describe('Maximum number of results to return (default: 20)'), offset: z.number().min(0).optional().describe('Number of results to skip (default: 0)'), filter: z.string().optional().describe('Filter query to apply'), sort: z.array(z.string()).optional().describe('Attributes to sort by, e.g. ["price:asc"]'), facets: z.array(z.string()).optional().describe('Facets to return'), attributesToRetrieve: z.array(z.string()).optional().describe('Attributes to include in results'), attributesToCrop: z.array(z.string()).optional().describe('Attributes to crop'), cropLength: z.number().optional().describe('Length at which to crop cropped attributes'), attributesToHighlight: z.array(z.string()).optional().describe('Attributes to highlight'), highlightPreTag: z.string().optional().describe('Tag to insert before highlighted text'), highlightPostTag: z.string().optional().describe('Tag to insert after highlighted text'), showMatchesPosition: z.boolean().optional().describe('Whether to include match positions in results'), matchingStrategy: z.string().optional().describe("Matching strategy: 'all' or 'last'"), }, async ({ indexUid, q, limit, offset, filter, sort, facets, attributesToRetrieve, attributesToCrop, cropLength, attributesToHighlight, highlightPreTag, highlightPostTag, showMatchesPosition, matchingStrategy }: SearchParams) => { try { const response = await apiClient.post(`/indexes/${indexUid}/search`, { q, limit, offset, filter, sort, facets, attributesToRetrieve, attributesToCrop, cropLength, attributesToHighlight, highlightPreTag, highlightPostTag, showMatchesPosition, matchingStrategy, }); return { content: [{ type: 'text', text: JSON.stringify(response.data, null, 2) }], }; } catch (error) { return createErrorResponse(error); } } );
  • src/index.ts:66-66 (registration)
    Invocation of registerSearchTools on the MCP server instance, which in turn registers the 'search' tool.
    registerSearchTools(server);
  • TypeScript interface defining the shape of SearchParams used in the handler type annotation.
    interface SearchParams { indexUid: string; q: string; limit?: number; offset?: number; filter?: string; sort?: string[]; facets?: string[]; attributesToRetrieve?: string[]; attributesToCrop?: string[]; cropLength?: number; attributesToHighlight?: string[]; highlightPreTag?: string; highlightPostTag?: string; showMatchesPosition?: boolean; matchingStrategy?: string; }

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/devlimelabs/meilisearch-ts-mcp'

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