Skip to main content
Glama
jina-ai

Jina AI Remote MCP Server

Official
by jina-ai

sort_by_relevance

Sort documents by their relevance to a specific query using Jina AI's reranking technology. Organize search results or content collections to prioritize information that best matches your topic.

Instructions

Rerank a list of documents by relevance to a query using Jina Reranker API. Use this when you have multiple documents and want to sort them by how well they match a specific query or topic. Perfect for document retrieval, content filtering, or finding the most relevant information from a collection.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYesThe query or topic to rank documents against (e.g., 'machine learning algorithms', 'climate change solutions')
documentsYesArray of document texts to rerank by relevance
top_nNoMaximum number of top results to return

Implementation Reference

  • Handler function that executes the tool logic by calling Jina's rerank API with the provided query and documents, returning the top relevant results.
    async ({ query, documents, top_n }: { query: string; documents: string[]; top_n?: number }) => {
    	try {
    		const props = getProps();
    
    		const tokenError = checkBearerToken(props.bearerToken);
    		if (tokenError) {
    			return tokenError;
    		}
    
    		if (documents.length === 0) {
    			throw new Error("No documents provided for reranking");
    		}
    
    		const response = await fetch('https://api.jina.ai/v1/rerank', {
    			method: 'POST',
    			headers: {
    				'Accept': 'application/json',
    				'Content-Type': 'application/json',
    				'Authorization': `Bearer ${props.bearerToken}`,
    			},
    			body: JSON.stringify({
    				model: 'jina-reranker-v2-base-multilingual',
    				query,
    				top_n: top_n || documents.length,
    				documents
    			}),
    		});
    
    		if (!response.ok) {
    			return handleApiError(response, "Document reranking");
    		}
    
    		const data = await response.json() as any;
    
    		// Return each result as individual text items for consistency
    		const contentItems: Array<{ type: 'text'; text: string }> = [];
    
    		if (data.results && Array.isArray(data.results)) {
    			for (const result of data.results) {
    				contentItems.push({
    					type: "text" as const,
    					text: yamlStringify(result),
    				});
    			}
    		}
    
    		return {
    			content: contentItems,
    		};
    	} catch (error) {
    		return createErrorResponse(`Error: ${error instanceof Error ? error.message : String(error)}`);
    	}
    },
  • Zod schema defining the input parameters for the tool: query (string), documents (array of strings), optional top_n (number).
    {
    	query: z.string().describe("The query or topic to rank documents against (e.g., 'machine learning algorithms', 'climate change solutions')"),
    	documents: z.array(z.string()).describe("Array of document texts to rerank by relevance"),
    	top_n: z.number().optional().describe("Maximum number of top results to return")
    },
  • Registration of the sort_by_relevance tool on the MCP server, conditional on isToolEnabled, including schema and handler.
    if (isToolEnabled("sort_by_relevance")) {
    	server.tool(
    		"sort_by_relevance",
    		"Rerank a list of documents by relevance to a query using Jina Reranker API. Use this when you have multiple documents and want to sort them by how well they match a specific query or topic. Perfect for document retrieval, content filtering, or finding the most relevant information from a collection.",
    		{
    			query: z.string().describe("The query or topic to rank documents against (e.g., 'machine learning algorithms', 'climate change solutions')"),
    			documents: z.array(z.string()).describe("Array of document texts to rerank by relevance"),
    			top_n: z.number().optional().describe("Maximum number of top results to return")
    		},
    		async ({ query, documents, top_n }: { query: string; documents: string[]; top_n?: number }) => {
    			try {
    				const props = getProps();
    
    				const tokenError = checkBearerToken(props.bearerToken);
    				if (tokenError) {
    					return tokenError;
    				}
    
    				if (documents.length === 0) {
    					throw new Error("No documents provided for reranking");
    				}
    
    				const response = await fetch('https://api.jina.ai/v1/rerank', {
    					method: 'POST',
    					headers: {
    						'Accept': 'application/json',
    						'Content-Type': 'application/json',
    						'Authorization': `Bearer ${props.bearerToken}`,
    					},
    					body: JSON.stringify({
    						model: 'jina-reranker-v2-base-multilingual',
    						query,
    						top_n: top_n || documents.length,
    						documents
    					}),
    				});
    
    				if (!response.ok) {
    					return handleApiError(response, "Document reranking");
    				}
    
    				const data = await response.json() as any;
    
    				// Return each result as individual text items for consistency
    				const contentItems: Array<{ type: 'text'; text: string }> = [];
    
    				if (data.results && Array.isArray(data.results)) {
    					for (const result of data.results) {
    						contentItems.push({
    							type: "text" as const,
    							text: yamlStringify(result),
    						});
    					}
    				}
    
    				return {
    					content: contentItems,
    				};
    			} catch (error) {
    				return createErrorResponse(`Error: ${error instanceof Error ? error.message : String(error)}`);
    			}
    		},
    	);
    }

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/jina-ai/MCP'

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