Skip to main content
Glama
wlmwwx

Jina AI Remote MCP Server

by wlmwwx

sort_by_relevance

Sort documents by relevance to a specific query using Jina AI's reranking technology for improved information retrieval and content filtering.

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 sort_by_relevance tool by calling the Jina Reranker API to rerank provided documents based on the query, 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 sort_by_relevance tool: query (string), documents (array of strings), top_n (optional 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 via server.tool call within registerJinaTools function, specifying name, description, input schema, and handler.
    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)}`);
    		}
    	},
    );
  • src/index.ts:21-21 (registration)
    Call to registerJinaTools which registers all Jina tools including sort_by_relevance during server initialization.
    registerJinaTools(this.server, () => this.props);

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/wlmwwx/jina-mcp'

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