Jina AI Remote MCP Server
OfficialThis server is a remote MCP server that gives AI assistants web reading, searching, academic research, image capture, and document-processing tools powered by Jina AI APIs.
Read web pages or PDFs as clean markdown (
read_url), with optional question-focused passage extraction, parallel URL arrays, and OCR for scanned/image PDFsCapture webpage screenshots as base64 or URLs (
capture_screenshot_url)Search the web (
search_web), arXiv (search_arxiv), SSRN (search_ssrn), Jina blog (search_jina_blog), and images (search_images), including parallel search variantsGuess a webpage's publish/update datetime with confidence (
guess_datetime_url)Get current time/location/network context for localized responses (
primer)Rerank documents by relevance to a query (
sort_by_relevance) and deduplicate strings for semantic diversity (deduplicate_strings)Extract figures, tables, and equations from PDFs (
extract_pdf)Show the configured API key for debugging (
show_api_key, though README says it was removed in v1.10.0)
Provides search capabilities for academic papers and preprints on the arXiv repository through the search_arxiv tool.
Supports deployment of the MCP server to Cloudflare Workers for remote hosting and access.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Jina AI Remote MCP Server search the web for latest developments in quantum computing"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Jina AI Remote MCP Server
A remote Model Context Protocol (MCP) server for the Jina Reader, Search, Embeddings and Reranker APIs:
Usage
Some clients do not support env variable, so you may need to replace${JINA_API_KEY} below to a hardcoded real API key jina_xxx.
For client that supports remote MCP server:
{
"mcpServers": {
"jina-mcp-server": {
"url": "https://mcp.jina.ai/v1",
"headers": {
"Authorization": "Bearer ${JINA_API_KEY}" // optional
}
}
}
}For Claude Code:
claude mcp add -s user --transport http jina https://mcp.jina.ai/v1 \
--header "Authorization: Bearer ${JINA_API_KEY}"For OpenAI Codex: find ~/.codex/config.toml and add the following:
[mcp_servers.jina-mcp-server]
command = "npx"
args = [
"-y",
"mcp-remote",
"https://mcp.jina.ai/v1",
"--header",
"Authorization: Bearer ${JINA_API_KEY}"]For client that does not support remote MCP server yet, you need mcp-remote a local proxy to connect to the remote MCP server.
{
"mcpServers": {
"jina-mcp-server": {
"command": "npx",
"args": [
"mcp-remote",
"https://mcp.jina.ai/v1",
"--header",
"Authorization: Bearer ${JINA_API_KEY}"
]
}
}
}Related MCP server: Jina AI Remote MCP Server
Available tools
Tool | Description | Is Jina API Key Required? |
| Get current contextual information for localized, time-aware responses | No |
| Read a web page or PDF as markdown. Pass | Optional* |
| Capture a screenshot of a web page via Reader API | Optional* |
| Guess a page's publish or last-update datetime, with a confidence score | No |
| Search the web. Returns titles, URLs and engine snippets via Reader API | Yes |
| Search academic papers and preprints on arXiv repository via Reader API | Yes |
| Search academic papers on SSRN (Social Science Research Network) via Reader API | Yes |
| Search the web for images via Reader API | Yes |
| Search Jina AI news and blog posts at jina.ai/news | No |
| Rerank documents by relevance to a query via Reranker API | Yes |
| Get top-k semantically unique strings via Embeddings API and submodular optimization | Yes |
| Extract figures, tables, and equations from PDF documents (arXiv papers or any PDF URL) using layout detection | Yes |
Optional tools work without an API key at rate limits. Use a key for higher limits. Free keys: https://jina.ai
Tool Filtering before Registering
Registering a tool costs context tokens for its name, description and schema whether or not it is called. With 12 tools, that budget is spent before the first request.
Filtering server-side through query parameters on the endpoint URL (/v1?...) excludes tools before registration, so the client never sees them.
Query Parameters
Parameter | Description | Example |
| Comma-separated tool names to exclude |
|
| Comma-separated tool names to include |
|
| Comma-separated tags to exclude |
|
| Comma-separated tags to include |
|
| Cap |
|
Available Tags
Tag | Tools |
| search_web, search_arxiv, search_ssrn, search_images, search_jina_blog |
| read_url, capture_screenshot_url |
| primer, guess_datetime_url, extract_pdf |
| sort_by_relevance, deduplicate_strings |
Precedence
Filters are applied in this order (highest to lowest priority):
exclude_tools- Always excludes specified toolsexclude_tags- Excludes tools in specified tagsinclude_tools- Includes specified toolsinclude_tags- Starts with only tools in specified tags
Examples
Exclude the rerank and utility tags:
{
"mcpServers": {
"jina-mcp-server": {
"url": "https://mcp.jina.ai/v1?exclude_tags=rerank,utility",
"headers": {
"Authorization": "Bearer ${JINA_API_KEY}"
}
}
}
}Only include search and read tools:
{
"mcpServers": {
"jina-mcp-server": {
"url": "https://mcp.jina.ai/v1?include_tags=search,read",
"headers": {
"Authorization": "Bearer ${JINA_API_KEY}"
}
}
}
}Exclude specific tools:
{
"mcpServers": {
"jina-mcp-server": {
"url": "https://mcp.jina.ai/v1?exclude_tools=search_ssrn,search_images",
"headers": {
"Authorization": "Bearer ${JINA_API_KEY}"
}
}
}
}Troubleshooting
I got stuck in a tool calling loop - what happened?
This is a common issue with LMStudio when the default context window is 4096 and you're using a thinking model like gpt-oss-120b or qwen3-4b-thinking. As thinking and tool calling continue, the run hits the context limit, the model loses the start of the task, and it loops.
Load the model with enough context length to hold the whole tool-calling chain.

I can't see all tools.
Some MCP clients have local caching and do not actively update tool definitions. If tools are missing or look outdated, remove and re-add the jina-mcp-server to force a refresh of the cached definitions. In LMStudio, you can click the refresh button to load new tools.

Claude Desktop says "Server disconnected" on Windows
Cursor and Claude Desktop (Windows) have a bug where spaces inside args aren't escaped when it invokes npx, which ends up mangling these values. You can work around it using:
{
// rest of config...
"args": [
"mcp-remote",
"https://mcp.jina.ai/v1",
"--header",
"Authorization:${AUTH_HEADER}" // note no spaces around ':'
],
"env": {
"AUTH_HEADER": "Bearer <JINA_API_KEY>" // spaces OK in env vars
}
},Cursor shows a red dot on this MCP status
Likely a Cursor UI bug. The MCP works. Toggling off/on clears the dot; on a remote MCP that restarts the local proxy, not a server.

My LLM never uses some tools
If all tools are enabled but the model still ignores some, that is expected: models call the tools they were trained on. Some research says LLMs must be trained to use a tool family. In Cursor, add this rule to a .mdc file:
---
alwaysApply: true
---
When you are uncertain about knowledge, or the user doubts your answer, always use Jina MCP tools to search and read best practices and latest information. Use search_arxiv and read_url together when questions relate to theoretical deep learning or algorithm details. Use search_ssrn for social sciences, economics, law, and finance research. search_web, search_arxiv, and search_ssrn cannot be used alone - always follow with read_url on the result URLs. One read_url call can take up to 5 URLs at once.Why is my content truncated?
Claude Code, Claude Desktop, and Cursor enforce a fixed 25k token limit on MCP tool responses. To stop these clients from rejecting a large response outright, this server applies a token guardrail to read_url.
Items are kept whole, in order, while they fit. The first that does not fit is cut to a prefix that does, and later items are dropped. A [jina-mcp] ... note records what was truncated or omitted, so a partial document is marked partial. At least one item always survives, even one over budget.
The server targets below the limit. It counts tokens with cl100k, the client with its own tokenizer, the cut is a proportional character estimate, and the client measures the serialized JSON payload instead of the raw text. It therefore also enforces a ceiling of 3 bytes per allowed token, which holds across tokenizers for ASCII prose (~3.6 bytes/token) and CJK (~3 bytes/token). Cutting short loses part of the content. A rejected response loses all of it.
Any client can set its own budget with max_tokens on the endpoint URL (for example https://mcp.jina.ai/v1?max_tokens=50000), and max_tokens=0 disables truncation entirely. Clients with configurable limits, such as OpenAI Codex (tool_output_token_limit), are otherwise left alone.
Several queries or URLs in one call
search_web, search_arxiv, search_ssrn and read_url take a string or an array on query / url. An array runs every item concurrently in a single round trip. search_images takes one query at a time.
{ "url": ["https://react.dev/reference/react/useState",
"https://docs.python.org/3/library/functions.html"],
"question": "what does the hook or built-in return" }Arrays cap at 5 entries, enforced by the schema. withAllLinks, withAllImages, question, chunk_size, topk, ocr and page are set once for the whole array, not per entry: every URL in the call gets the same question, and a multi-page OCR needs one call per page.
Why is the endpoint called /sse but using Streamable HTTP?
The /sse endpoint URL is kept for backward compatibility with existing users. The recommended endpoint is now /v1. Both use the same Streamable HTTP transport (the new MCP standard from spec 2025-03-26), not the deprecated SSE transport.
This works because:
Claude Desktop, Cursor, Windsurf use
mcp-remotewhich defaults tohttp-firststrategy (tries Streamable HTTP first)Claude Code has native support for both transports
LM Studio supports direct connection to Streamable HTTP endpoints
The response streaming still uses SSE format (Content-Type: text/event-stream), but the protocol layer (session management, initialization) follows Streamable HTTP spec. All major MCP clients are compatible.
Client-side tool filtering with mcp-remote
If you're using mcp-remote as a local proxy, you can also filter tools client-side using its --ignore-tool flag:
{
"mcpServers": {
"jina-mcp-server": {
"command": "npx",
"args": [
"mcp-remote",
"https://mcp.jina.ai/v1",
"--header",
"Authorization: Bearer ${JINA_API_KEY}",
"--ignore-tool", "search_images",
"--ignore-tool", "search_ssrn",
"--ignore-tool", "extract_pdf"
]
}
}
}This filters at the proxy level before tools reach the client. Server-side filtering via query parameters (see Tool Filtering) is cheaper, because the tokens are never sent.
Reading a page with a question in mind
read_url returns the whole page. Pass question and the page is chunked, its passages are scored against the query by Reranker v3.5, and only the highest-scoring ones are returned.
Parameter | Default | Effect |
| (unset) | Unset returns the full page. Set returns passages instead of |
|
| Target passage size in words, split at sentence boundaries, so a target, not a hard cut. Counted in words in every script. 1-4096. |
|
| Passages to keep, best first. 1-50. |
question gates the other two. Without it the response is unchanged from a plain read.
// full page: 69,530 bytes
{ "url": "https://www.paulgraham.com/greatwork.html" }
// passages: 1,195 bytes
{ "url": "https://www.paulgraham.com/greatwork.html",
"question": "Why are new ideas hard to see?", "topk": 3, "chunk_size": 50 }Response shape: question, snippets, snippet_source: content, no content. snippets is one element holding up to topk passages joined by …. No score is returned, so relevance cannot be thresholded here. Ladder measured at chunk_size=40: topk 1 gives 433 bytes and no separator, 2 gives 699 bytes and one separator, 5 gives 1,537 bytes and one separator. Fewer than topk passages can come back.
If extraction cannot run — empty page, unreadable page, no API key to rank with — the full body comes back with snippet_source: full_content and a note.
Byte cost, same URL, same endpoint, bytes of returned text:
page | plain read | with |
docs.python.org/3/library/functions.html | 83,786 | 874 |
en.wikipedia.org/wiki/List_of_countries_by_GDP_(nominal) | 12,295 | 912 |
paulgraham.com/greatwork.html | 69,530 | 1,195 |
Measured against a local wrangler dev of this repo with an API key. r.jina.ai returns different sizes for the same URL, so do not mix the two sets.
Verified on this build: Python docs, Chinese Wikipedia, React references, GitHub READMEs, arXiv PDFs, essays. Compound questions worked here too (the os.path query returned both the join rule and the splitext example, and Beijing returned both population and area), so ask one thing per call as a habit, not because every multi-part question fails.
Reproduced failure modes. The response does not flag any of these:
Positional questions fail. Ranking matches text, not document order.
raw.githubusercontent.com/vitejs/vite/main/packages/vite/CHANGELOG.mdis 283,749 bytes and opens with## [8.3.0] ... (2026-09-10). Asked for the latest released version, it returned 1,008 bytes containing6.0.0and no8.3.0at all. Read the first screen for latest, first, current.Tables, fenced code and page furniture are removed before ranking. read.ts says so and it holds: the GDP list page is 12,295 bytes through
read_urland containsJapanbut not4,379,253. Asked for Japan's figure,questionreturned the map colour legend,$1–5 trillion $750 billion – $1 trillion …. A number that lives in a table is not reachable this way.Inline code loses tokens.
curl -fsSL https://bun.sh/install | bashcame back ascurl -fsSL | bash. Never run a command copied out of a passage without checking the source.Blocked pages return their login wall as content.
x.com/jina_aireturned 315 bytes ofLog inSign up … hasn't postedwithsnippet_source: contentand no error.chunk_sizeis not monotonic. 50 returned 521 bytes opening on the answer (And yet empirically having new ideas is hard.); 400 returned 2,260 bytes opening off-topic (But the relationship is closer than that.). Use 40-70 for commands, signatures and numbers, 150-200 for explanation.
A question-grounded read gets a 60s budget against 30s for a plain read, because chunking and reranking run after the fetch. The same 60s applies to a URL array carrying a question.
Reading a scanned document or a PDF
A plain read parses HTML. It returns nothing useful when the text is not in the markup (scanned pages, image-only PDFs), and flattens formulas and table structure otherwise. Pass ocr and the rendered page goes through jina-ocr-v1 as an image, returning Markdown with formulas and tables intact.
{ "url": "https://arxiv.org/pdf/2609.03181", "ocr": true } // page 1
{ "url": "https://arxiv.org/pdf/2609.03181", "ocr": true, "page": 2 } // page 2One page per call. Page 1 unless page says otherwise, so a long document needs one call per page. Measured on arXiv 2609.03181, a 20-page paper:
bytes returned | tokens billed | |
plain read | 49,466 (whole PDF) | 13,864 |
| 2,963 (page 1) | 61,520 |
| 2,749 (page 2) | 62,720 |
Off by default, because OCR bills more tokens per page than a plain read costs per document. Turn it on when the HTML path fails or the layout matters. page is shared across a URL array, so several pages of one document take one call each.
Functions have been removed in v1.10.0
The following tools has been proved not effective or simply broken.
Tool | Use instead |
|
|
| pass an array to |
| rewrite the query yourself; the endpoint returned one near-copy of the input |
| classify with the model; label scores differed by ~0.006, which is noise |
| the response carried base64 JPEG data, not just the selected items |
| read the citation from the publisher or DBLP page directly; both backends were failing live |
| nothing. It returned the bearer token into the conversation |
Developer Guide
Local Development
# Clone the repository
git clone https://github.com/jina-ai/MCP.git
cd MCP
# Install dependencies
npm install
# Start development server
npm run startDeploy to Cloudflare Workers
This will deploy your MCP server to a URL like: jina-mcp-server.<your-account>.workers.dev/v1
Available Tools
19 toolscapture_screenshot_urlA
Capture high-quality screenshots of web pages in base64 encoded JPEG format. Use this tool when you need to visually inspect a website, take a snapshot for analysis, or show users what a webpage looks like.
Inputs: url (required), firstScreenOnly, return_url.
deduplicate_imagesA
Get top-k semantically unique images (URLs or base64-encoded) using Jina CLIP v2 embeddings and submodular optimization. Use this when you have many visually similar images and want the most diverse subset.
Inputs: images (required), k.
deduplicate_stringsA
Get top-k semantically unique strings from a list using Jina embeddings and submodular optimization. Use this when you have many similar strings and want to select the most diverse subset that covers the semantic space. Perfect for removing duplicates, selecting representative samples, or finding diverse content.
Inputs: strings (required), k.
expand_queryB
Expand and rewrite search queries based on an up-to-date query expansion model. This tool takes an initial query and returns multiple expanded queries that can be used for more diversed and deeper searches. Useful for improving deep research results by searching broader and deeper.
Inputs: query (required).
extract_pdfA
Extract figures, tables, and equations from PDF documents using layout detection. Perfect for extracting visual elements from academic papers on arXiv or any PDF URL. Returns base64-encoded images of detected elements with metadata.
Inputs: id, url, max_edge, type.
guess_datetime_urlA
Guess the last updated or published datetime of a web page. This tool examines HTTP headers, HTML metadata, Schema.org data, visible dates, JavaScript timestamps, HTML comments, Git information, RSS/Atom feeds, sitemaps, and international date formats to provide the most accurate update time with confidence scores. Returns the best guess timestamp and confidence level.
Inputs: url (required).
parallel_read_urlA
Read multiple web pages in parallel to extract clean content efficiently. For best results, provide multiple URLs that you need to extract simultaneously. This is useful for comparing content across multiple sources or gathering information from multiple pages at once.
Inputs: urls (required), timeout.
parallel_search_arxivA
Run multiple arXiv searches in parallel for comprehensive research coverage and diverse academic angles. For best results, provide multiple search queries that explore different research angles and methodologies. You can use expand_query to help generate diverse queries, or create them yourself.
Inputs: searches (required), timeout.
parallel_search_ssrnB
Run multiple SSRN searches in parallel for comprehensive social science research coverage and diverse academic angles. For best results, provide multiple search queries that explore different research angles and methodologies. You can use expand_query to help generate diverse queries, or create them yourself.
Inputs: searches (required), timeout.
parallel_search_webA
Run multiple web searches in parallel for comprehensive topic coverage and diverse perspectives. For best results, provide multiple search queries that explore different aspects of your topic. You can use expand_query to help generate diverse queries, or create them yourself.
Inputs: searches (required), timeout.
primerA
Get up-to-date contextual information of the current session to provide localized, time-aware responses. Use this when you need to know the current time, user's location, or network environment to give more relevant and personalized information.
Inputs: no named parameters.
read_urlA
Extract and convert web page content to clean, readable markdown format. Perfect for reading articles, documentation, blog posts, or any web content. Use this when you need to analyze text content from websites, bypass paywalls, or get structured data.
Inputs: url (required), withAllLinks, withAllImages.
search_arxivA
Search academic papers and preprints on arXiv repository. Perfect for finding research papers, scientific studies, technical papers, and academic literature. Use this when researching scientific topics, looking for papers by specific authors, or finding the latest research in fields like AI, physics, mathematics, computer science, etc.
Inputs: query (required), num, tbs.
search_imagesA
Search for images across the web, similar to Google Images. Use this when you need to find photos, illustrations, diagrams, charts, logos, or any visual content. Perfect for finding images to illustrate concepts, locating specific pictures, or discovering visual resources. Images are returned by default as small base64-encoded JPEG images.
Inputs: query (required), return_url, tbs, location, +2 more.
search_jina_blogA
Search Jina AI news and blog posts at jina.ai/news for articles about AI, machine learning, neural search, embeddings, and Jina products. Use this to find official Jina documentation, tutorials, product announcements, and technical deep-dives.
Inputs: query (required), num, tbs.
search_ssrnA
Search academic papers and preprints on SSRN (Social Science Research Network). Perfect for finding research papers in social sciences, economics, law, finance, accounting, management, and humanities. Use this when researching social science topics, looking for working papers, or finding the latest research in business and economics fields.
Inputs: query (required), num, tbs.
search_webA
Search the entire web for current information, news, articles, and websites. Use this when you need up-to-date information, want to find specific websites, research topics, or get the latest news. Ideal for answering questions about recent events, finding resources, or discovering relevant content.
Inputs: query (required), num, tbs, location, +2 more.
show_api_keyB
Return the bearer token from the Authorization header of the MCP settings, which is used to debug.
Inputs: no named parameters.
sort_by_relevanceA
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.
Inputs: query (required), documents (required), top_n.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 19 tools
Most tools have distinct purposes, such as capture_screenshot_url for visual snapshots, read_url for text extraction, and various search tools for different sources. However, there is some overlap between parallel_search_web and search_web, which could cause confusion about when to use parallel vs. single searches, and deduplicate_images and deduplicate_strings share similar semantic deduplication logic but apply to different data types.
Tool names predominantly follow a consistent verb_noun pattern (e.g., capture_screenshot_url, read_url, search_web), with clear and descriptive naming. Minor deviations exist, such as primer and show_api_key, which don't follow the verb_noun convention, but these are exceptions in an otherwise uniform set.
With 19 tools, the count is slightly high but reasonable for a server focused on web and document processing, search, and AI utilities. It covers a broad scope without being excessive, though some tools like parallel_search_arxiv and search_arxiv might be consolidated for efficiency.
The toolset provides comprehensive coverage for web and document processing, including content extraction (read_url, extract_pdf), search across multiple sources (web, arXiv, SSRN), deduplication, query expansion, and relevance sorting. No obvious gaps exist; it supports full workflows from data gathering to analysis and refinement.
Maintenance
Related MCP Connectors
Jina AI Reader/Search MCP — turn any URL into clean LLM-ready markdown, plus web search.
Read a URL as clean markdown, screenshot a website, url to PDF. Web access for agents, no signup.
A real browser for your agent: screenshots, page checks, Markdown and PDFs.
Web tools for AI agents: URL to clean Markdown, site crawl, screenshots, PDF/Office to text, OCR.
Related MCP Servers
- AlicenseAqualityNot gradedmaintenanceProvides access to Jina AI's suite of web tools including URL reading, web/image/academic search, content extraction, embeddings, and reranking capabilities. Enables AI assistants to search the web, extract content from URLs, and process information with semantic understanding.19Apache 2.0
- AlicenseNot gradedqualityDmaintenanceProvides access to Jina's web search, content extraction, image search, and AI-powered reranking tools through a comprehensive suite of URL processing and semantic analysis capabilities. Enables users to search the web, extract clean markdown from URLs, capture screenshots, search academic papers, and perform advanced text/image deduplication with embeddings.Apache 2.0
- AlicenseNot gradedqualityNot gradedmaintenanceProvides access to Jina AI's suite of tools including web search, URL reading, image search, embeddings, and reranking capabilities. Enables users to extract web content as markdown, search academic papers, capture screenshots, and perform semantic operations through natural language.-
- AlicenseNot gradedqualityNot gradedmaintenanceProvides access to Jina AI's web reading, search, embeddings, and reranking capabilities. Enables URL content extraction, web/arXiv/image search, document deduplication, and relevance ranking through natural language.Apache 2.0