Verified MCP server: Jina AI

The Jina MCP server, verified live on a real Mac.

  • Verified2026-08-03macOS 15.7.7
  • Packagejina-ai/MCP Hosted, no npm package
  • Self-reportedJina AI Official MCP Server 1.4.0
  • MCP protocol2025-06-18
  • Runtimev24.18.0 (test client)

The short answer

Last verified 2026-08-03

The Jina MCP server is Jina AI's own hosted server for reading web pages, searching the web and searching academic papers, and it answers on a web address instead of running as a program on your Mac. The repository behind it is jina-ai/MCP, Apache-2.0 licensed, 794 stars, and it was pushed the same day we captured this page. Twenty-one tools came back from the running server, two more than its README table lists. Several of them need no credential at all: we called primer with no Authorization header of any kind and got a real answer back, so the badge on this page rests on a call that actually succeeded. The rest go through paid Jina APIs, and we captured word for word what those say when the key is missing. All of it is below. [1][2][3]

  • Tools

    21, enumerated live

  • Credentials

    Key for most tools, not all [2]

  • Transport

    Streamable HTTP, hosted by Jina [2]

  • Maintainer

    jina-ai (official) [1]

  • Downloads

    No package to download [5][2]

  • License

    Apache-2.0 [1]

Verification

How this MCP server was verified.

Method

The server we verified is the one Jina AI hosts at https://mcp.jina.ai/v1, so there is no local process to spawn and no stderr to read. We spoke raw JSON-RPC over Streamable HTTP to it from this Mac, with node only as the test client: initialize, then notifications/initialized, then tools/list, then one real tool call. The server is stateless and issued no session id, so nothing had to be carried between requests. The tool call was primer, which needs no credential at all, and it answered with a genuine result derived from our own request. This Mac holds no Jina API key and none was used: the successful call went out with no Authorization header on it. We then called search_web twice, once with an obvious placeholder bearer token and once with no header at all, to capture what an auth-gated tool says when the key is missing, and ran two more probe passes covering a missing required argument, an unknown tool name, a wrong argument type and a malformed URL. The tool table below is the tools/list response, word for word. Two notes on the blocks that follow. The startup banner is the initialize reply with the long instructions string taken out so it fits on a page, and the untruncated capture is banked with the receipts. The sample call excerpt is the first four lines of what came back: the rest of that reply carried our own IP address, city-level location and network details, which we left out on purpose.

Startup banner

{"result":{"protocolVersion":"2025-06-18","capabilities":{"tools":{"listChanged":true}},"serverInfo":{"name":"Jina AI Official MCP Server","version":"1.4.0"}},"jsonrpc":"2.0","id":1}

One real tool call

tools/call primer {}
timestamp:
  utc: 2026-08-03T21:07:27.733Z
  userTimezone: Europe/Bucharest
  userLocalTime: 8/4/2026, 12:07:27 AM

Real lines from the captured result: enough to prove the call answered.

Tools

Every tool, enumerated from the running server.

The server answered tools/list with 21 tools on 2026-08-03. The names, descriptions and parameters below are its own words, copied from that response and never edited.

ToolWhat it does
show_api_key

Return the bearer token from the Authorization header of the MCP settings, which is used to debug.

primer

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.

guess_datetime_urlurl*

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.

capture_screenshot_urlurl*firstScreenOnlyreturn_url

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.

read_urlurl*withAllLinkswithAllImages

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.

search_webquery*numtbslocationglhl

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.

expand_queryquery*

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.

search_arxivquery*numtbs

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.

search_ssrnquery*numtbs

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.

search_jina_blogquery*numtbs

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.

search_imagesquery*return_urltbslocationglhl

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.

parallel_search_websearches*timeout

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.

parallel_search_arxivsearches*timeout

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.

parallel_search_ssrnsearches*timeout

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.

parallel_read_urlurls*timeout

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.

classify_texttexts*labels*model

Classify texts into user-defined labels using Jina embeddings. Use this when you need to categorize, tag, or sort text content into predefined categories. Perfect for sentiment analysis, topic classification, content moderation, or any text categorization task.

sort_by_relevancequery*documents*top_n

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.

deduplicate_stringsstrings*k

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.

deduplicate_imagesimages*k

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.

search_bibtexquery*numyearauthor

Search for academic papers and return BibTeX citations. Searches DBLP (computer science) and Semantic Scholar (broad academic coverage) for comprehensive results. Returns formatted BibTeX entries ready to use in LaTeX documents.

extract_pdfidurlmax_edgetype

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.

Parameters marked with * are required.

Setup

Working configs, one per app.

Copy the block for the app you use. Each one is the configuration this server was verified with.

Claude Desktop

Open the file ~/Library/Application Support/Claude/claude_desktop_config.json (in Claude Desktop: Settings, then Developer, then Edit Config) and add:

{
  "mcpServers": {
    "jina": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://mcp.jina.ai/v1",
        "--header",
        "Authorization: Bearer YOUR_JINA_API_KEY"
      ]
    }
  }
}

That npx line is the mcp-remote bridge, which turns a hosted server into the local command this file expects. Newer Claude Desktop builds also take a plain url entry with a headers block, and the Connectors page takes the address on its own. If you have no key yet, delete the two --header lines: the server still connects and still lists every tool, and only the paid ones answer Unauthorized. Quit and reopen Claude Desktop after you save. [2][9][8]

Claude Code

One command in your terminal, and it is the one Jina documents:

claude mcp add -s user --transport http jina https://mcp.jina.ai/v1 --header "Authorization: Bearer ${JINA_API_KEY}"

The -s user flag makes it available in every project instead of just this one. That command reads JINA_API_KEY from your shell, so export it first, or paste the key itself in place of ${JINA_API_KEY}. If you added this server earlier with --transport sse, remove it first with claude mcp remove -s user jina, then run the line above. [2][10]

Cursor

Add to ~/.cursor/mcp.json for every project, or to .cursor/mcp.json inside one project:

{
  "mcpServers": {
    "jina": {
      "url": "https://mcp.jina.ai/v1",
      "headers": {
        "Authorization": "Bearer YOUR_JINA_API_KEY"
      }
    }
  }
}

The url key is what marks the entry as remote, so there is no command to run and nothing to install. Cursor picks the file up on restart. Treat this file the way you treat any file with a key in it: it is plain text on disk, so keep it out of a repository you push. [11][2]

Routines

No JSON file and no terminal. In Routines: Settings, then Assistant, then Connections, then Add MCP Server. The form already opens in URL (SSE/HTTP) mode, which is the mode this server needs:

Name          Jina AI
Server URL    https://mcp.jina.ai/v1
Bearer token  YOUR_JINA_API_KEY

Leave the Command (stdio) toggle alone: this server is a web address, not a command. The Bearer token field is optional here, and an empty one still gets you the tools that need no key, primer and search_bibtex among them. Click Test Connection first, which opens the connection and reports the tool count without saving anything, twenty-one for this one. [12][2]

No terminal needed

Set the Jina AI MCP server up without the terminal.

If you have never opened Terminal and never want to, this is your path. Routines is a Mac app that connects MCP servers for you: paste one web address, and this server's tools are available to your AI in chat and in scheduled routines. The Jina key is the only decision to make, and the second step tells you whether you need one.

  1. 01

    Install Routines

    Download the app from getroutines.ai/download, drag it to Applications, and sign in.

  2. 02

    Decide whether you need a key

    Four tools need no credential at all: primer, guess_datetime_url, search_jina_blog and search_bibtex. Three more, read_url, parallel_read_url and capture_screenshot_url, work without one at a lower rate limit. Everything else, web search, arXiv and SSRN search, image search, reranking, classification and PDF extraction, runs against paid Jina APIs and needs a key from jina.ai. If you want those, create the key now and copy it.

  3. 03

    Open the MCP settings

    Back in Routines, click your account at the bottom of the sidebar and choose Settings. Open the Assistant section, then the Connections tab, scroll to MCP Servers, and click Add MCP Server.

  4. 04

    Stay in URL (SSE/HTTP) mode

    The form opens in URL mode already, which is what a hosted server needs, so leave the Command (stdio) toggle alone. Name: Jina AI. Server URL: https://mcp.jina.ai/v1. Keep the /v1 on the end.

  5. 05

    Paste the key, then test

    Put your Jina key in the Bearer token field, or leave it empty to start with the free tools only. There is no Environment Variables box in URL mode: that field belongs to the Command (stdio) form, and this server does not use it. Click Test Connection: Routines opens the connection and reports how many tools it found, twenty-one for this one. Then click Add Server.

  6. 06

    Use it

    The tools work in chat right away, so you can paste a link and ask for the article back as clean text. To let a scheduled routine use them, open the routine, find the Tools & connections card, and tick the server under Apps.

Routine ideas

Routines worth scheduling.

Once the server is connected, a scheduled routine can use its tools while you are away. Copy a prompt, paste it into Routines, and pick a time.

A Monday research digest

Prompt

Every Monday at 8:00, search the web and arXiv for anything published in the last seven days on the topics listed in topics.md, read the five most useful pages in full, and save a one-line summary of each with its link to weekly-research.md.

A competitor page watch

Prompt

Every weekday at 7:30, read the three competitor pricing pages listed in competitors.md, compare each one against what pricing-watch.md already says about it, and append a dated line for every change you find.

A Friday citation run

Prompt

Every Friday at 16:00, search arXiv for new papers on the research topics in topics.md, fetch a BibTeX entry for each paper worth keeping, and append the entries to references.bib in my Notes folder.

Troubleshooting

The errors we hit, and what fixed them.

Real errors captured during the verification run, printed exactly as the server returned them.

A tool answers Unauthorized even though the whole tool list is there

What you see

Error: Search failed for query "model context protocol": Unauthorized

The fix

This is the server working as designed. It hands every client all 21 tools whether or not a key is attached, and only checks the key when a tool that costs money actually runs. We got this exact line back twice on purpose, once with an obvious placeholder bearer token and once with no Authorization header at all. Check that the key is in the right place for your client: the Bearer token field in Routines, the headers block in Cursor, the --header flag in Claude Code, and the mcp-remote --header argument in Claude Desktop.

A call is rejected before it ever leaves for Jina

What you see

MCP error -32602: Input validation error: Invalid arguments for tool read_url: [
  {
    "code": "invalid_union",
    "unionErrors": [
      {
        "issues": [
          {
            "code": "invalid_type",
            "expected": "string",
            "received": "undefined",
            "path": [
              "url"
            ],
            "message": "Required"
          }
        ],
        "name": "ZodError"
      },
      {
        "issues": [
          {
            "code": "invalid_type",
            "expected": "array",
            "received": "undefined",
            "path": [
              "url"
            ],
            "message": "Required"
          }
        ],
        "name": "ZodError"
      }
    ],
    "path": [
      "url"
    ],
    "message": "Invalid input"
  }
]

The fix

The server validates arguments before it spends anything, so a malformed call never costs you credit. We triggered this by calling read_url with no url at all; the two branches in the message are the two shapes url accepts, one URL or an array of them. A wrong type comes back in the same -32602 shape: sending num to search_web as the string three produced Expected number, received string. Nothing is broken, the assistant simply has to send what the tool table above lists.

The assistant calls a tool that does not exist

What you see

MCP error -32602: Tool read_urll not found

The fix

A plain typo, and we made this one on purpose by asking for read_urll. The tool table above is the full list the server answered with, so check the spelling against it. This is also what you see if a client cached an older tool list: disconnect the server and reconnect it so the client asks for tools/list again.

Reading a page fails with Invalid url

What you see

MCP error -32602: Input validation error: Invalid arguments for tool read_url: [
  {
    "validation": "url",
    "code": "invalid_string",
    "message": "Invalid url",
    "path": [
      "url"
    ]
  }
]

The fix

The address was not a full URL. We sent not-a-url to prove it. Give the tool the complete address including the scheme, so https://example.com/article rather than example.com/article. If you pasted the link out of a chat message, check that nothing was cut off the front of it.

Your MCP client cannot reach the server at all

The fix

This one never reaches Jina, so there is no server message to read. A hosted server needs a working internet connection at the moment the call runs, which matters for a scheduled routine that fires while you are on a plane. And a client that can only launch local commands reaches this address through the npx mcp-remote bridge, which belongs to Node.js: if Node is missing, that bridge fails at the spawn step before any request is sent. Install Node from nodejs.org, or use a client that dials the address directly, which is what Claude Code, Cursor and Routines all do.

FAQ

Questions people ask.

What is the Jina AI MCP server?

It is Jina AI's own hosted MCP server, published from the jina-ai/MCP repository and answering at https://mcp.jina.ai/v1. Once connected, an AI assistant such as Claude can search the web, read any URL back as clean markdown, screenshot a page, search arXiv and SSRN, fetch BibTeX citations, rerank or classify text, and pull figures out of a PDF. There is nothing to install, because the server runs on Jina's side and your client just calls the address. [1][2]

What tools does the Jina MCP server include?

The running server answered tools/list with 21 tools: web work (read_url, parallel_read_url, capture_screenshot_url, guess_datetime_url), search (search_web, parallel_search_web, search_images, expand_query), research (search_arxiv, search_ssrn, parallel_search_arxiv, parallel_search_ssrn, search_bibtex, extract_pdf, search_jina_blog), embedding utilities (classify_text, sort_by_relevance, deduplicate_strings, deduplicate_images) and one debug helper, show_api_key, plus primer for the current time and location. The README table lists 19, so the live capture found two the documentation does not mention. The table above is that capture, word for word. [2]

Do I need a Jina API key?

Only for some of it. Four tools need no credential at all: primer, guess_datetime_url, search_jina_blog and search_bibtex. Three more, read_url, parallel_read_url and capture_screenshot_url, work without a key at a lower rate limit. The paid Jina APIs sit behind the rest, so web search, arXiv and SSRN search, image search, query expansion, reranking, classification, deduplication and PDF extraction all need a key from jina.ai. We proved both ends of that split live: primer answered with no header on the request, and search_web answered Unauthorized with no header and again with a fake one. [2][4]

Is the Jina MCP server safe to connect?

Two things are worth knowing. This is a hosted tool, so every page you ask it to read and every query you ask it to run goes to Jina's servers by design, and your key travels there in an Authorization header on each call. And one tool, show_api_key, exists to print that bearer token straight back into the conversation, which is handy when a key is not being picked up and a bad idea in a transcript you are about to share. Nothing in the tool list writes to your Mac: every one of the 21 reads, searches, scores or reports something and hands the result back. [1]

Is this the same as the jina-mcp-tools npm package?

No. jina-mcp-tools is a third-party package, maintained by PsychArch rather than by Jina AI, at version 1.2.5 with 256 downloads in the week ending 2026-08-02 and 44 stars on GitHub. It is the most popular of several unofficial wrappers around Jina's APIs, and some of the older ones are archived. The server on this page is Jina's own, and there is no npm package called jina-mcp-server: that name returns a 404 on the registry. [6][7][5][1]

Jina AI was acquired by Elastic. Is the server still maintained?

Jina AI's own GitHub bio states the company was acquired by Elastic in October 2025, so it is fair to ask. The evidence on the day we checked points the other way from abandonment: the jina-ai/MCP repository was pushed on 2026-08-03, the same day we captured this page, it is not archived, and the live endpoint self-reported version 1.4.0. Worth rechecking before you build something long-lived on it, which is why the capture on this page carries a date. [3][1]

Which apps can use the Jina MCP server?

Any MCP client. Clients that dial a web address, such as Claude Code, Cursor and Routines, point straight at https://mcp.jina.ai/v1 and put the key in a header. Clients that can only launch a local command reach the same address through the npx mcp-remote bridge, which is the shape shown in the Claude Desktop block above. The server is identical either way; only the place you paste the config differs. [2][9][10][11][12]

Sources

Every external claim, receipted.

Anything on this page we did not observe in the run is linked here, with the date we read it. The run itself is the receipt for the rest.

  1. [1]

    GitHub: jina-ai/MCPaccessed 2026-08-03

    Described as the Official Jina AI Remote MCP Server: 794 stars, Apache-2.0, not archived, created 2025-08-09 and last pushed 2026-08-03, per the GitHub API.

  2. [2]

    jina-ai/MCP READMEaccessed 2026-08-03

    The endpoint https://mcp.jina.ai/v1 with /sse kept as a legacy alias, the per-client install commands, and the table of which tools need a JINA_API_KEY. That table lists 19 tools; the live server answered with 21.

  3. [3]

    GitHub: the jina-ai organizationaccessed 2026-08-03

    Org bio on the day of capture: "Your Search Foundation, Supercharged! (acquired by @elastic 2025/10)".

  4. [4]

    jina.aiaccessed 2026-08-03

    Where a Jina API key is issued. The separate rate-limit page at jina.ai/api-dashboard/rate-limit returned HTTP 404 on the same day.

  5. [5]

    npm registry: jina-mcp-serveraccessed 2026-08-03

    404 Not Found: there is no npm package by that name, because this server is published as an endpoint rather than as a package.

  6. [6]

    npm registry: jina-mcp-toolsaccessed 2026-08-03

    The most popular unofficial alternative: version 1.2.5 published 2026-07-17, maintained by PsychArch, MIT, 44 stars on GitHub and last pushed 2026-07-29.

  7. [7]

    npm downloads API: jina-mcp-tools, last weekaccessed 2026-08-03

    256 downloads for the week ending 2026-08-02.

  8. [8]

    npm registry: mcp-remoteaccessed 2026-08-03

    The local bridge that lets a stdio-only client reach a hosted MCP server. MIT, maintained by threepointone.

  9. [9]

    modelcontextprotocol.io: Connect to local MCP serversaccessed 2026-08-03

    The official Claude Desktop quickstart and the config file location.

  10. [10]

    Claude Code docs: MCPaccessed 2026-08-03

    The claude mcp add syntax for HTTP transports, scopes and headers.

  11. [11]

    Cursor docs: Model Context Protocolaccessed 2026-08-03

    The mcp.json shape, including url servers with a headers block, and the file locations.

  12. [12]

    Routines: Connectorsaccessed 2026-08-03

    How Routines runs one-click OAuth connectors and any MCP server.

This page describes Jina AI as it behaved in one dated run on one Mac. Versions move: if something here no longer matches what you see, the capture date at the top says how old the reading is.

Behind this directory

Routines, the app behind this directory, connects MCP servers like this one without a terminal: see how connectors work. The digests it writes stay markdown files on your Mac, and there is no cloud bill. Download Routines