Jina AI MCP server
Endpoint: https://mcp.jina.ai/v1 · Authentication: No auth
Jina Reader, web, arXiv, and image search, screenshot, PDF extraction, and reranking tools. Some tools work without a key; an optional Jina API key raises limits and unlocks the rest.
How do I authenticate?
Add the endpoint directly in your client. The catalog records no authentication requirement; no OAuth sign-in or API key is configured in this setup. The live server may change.
Authentication and connection guideConnection specification
- Remote endpoint
https://mcp.jina.ai/v1- Browser access
- Not yet measured
- Declared MCP transport
- Streamable HTTP
- Live-validated MCP transport
- Streamable HTTP — Observed by the latest catalog validation
- Declared authentication
- No authentication
- Detected authentication
- No authentication detected or retained from publisher evidence
- Alternative authentication
- Bearer token
- Protocol lifecycle
- Stateful MCP · 2025-11-25
- Required header
Authorization— Optional Jina API key: Bearer <JINA_API_KEY>- Category
- Search
Product documentation · Source repository · Official listing documentation
More Search MCP servers · Browse all MCP servers · Test this endpoint in the MCP Playground
Connect it
Live-validated endpoint: https://mcp.jina.ai/v1 · Streamable HTTP. No authentication is required by the catalog listing.
Agent prompt for Claude Code or Codex
Add the Jina AI MCP server to my MCP client configuration and verify that it works. What it is: Jina Reader, web, arXiv, and image search, screenshot, PDF extraction, and reranking tools. Some tools work without a key; an optional Jina API key raises limits and unlocks the rest. Server URL: https://mcp.jina.ai/v1 Transport: Streamable HTTP (remote MCP server, no local install). Authentication: none. The server accepts connections without credentials. Tools (12, as last observed by mcptest): capture_screenshot_url, deduplicate_strings, extract_pdf, guess_datetime_url, primer, read_url, search_arxiv, search_images, search_jina_blog, search_ssrn, search_web, sort_by_relevance. Reference: https://mcptest.io/servers/jina/ Steps: 1. Work out which MCP client I use (Claude Code, Codex, Cursor, VS Code or another) and add the server under the name "jina" in that client's MCP configuration, user scope unless I ask otherwise. Claude Code: claude mcp add --transport http --scope user 'jina' 'https://mcp.jina.ai/v1' Codex: codex mcp add 'jina' --url 'https://mcp.jina.ai/v1' Other clients: use the setup for that client on the reference page. 2. Never write a credential value into a file that could be committed; reference an environment variable or the client's secret store, and ask me for any value you need. 3. Verify: connect to the server and call tools/list. Confirm the tools above are listed, and report any sign-in step I still have to complete.
Claude Code setup
Run in a terminal. This user-scoped entry is available across projects.
claude mcp add --transport http --scope user 'jina' 'https://mcp.jina.ai/v1'Codex CLI setup
Run in a terminal; Codex stores the entry in ~/.codex/config.toml.
codex mcp add 'jina' --url 'https://mcp.jina.ai/v1'Cursor setup
Add to .cursor/mcp.json for this project, or ~/.cursor/mcp.json for all projects.
{
"mcpServers": {
"jina": {
"url": "https://mcp.jina.ai/v1"
}
}
}VS Code setup
Add to .vscode/mcp.json, or run “MCP: Open User Configuration” for a private user-level entry.
{
"servers": {
"jina": {
"type": "http",
"url": "https://mcp.jina.ai/v1"
}
}
}Claude setup
Add the endpoint above in Claude:
- Customize > Connectors > Add custom connector
- Team/Enterprise: Organization settings > Connectors > Add > Custom > Web
Claude Desktop setup
Add the endpoint above in Claude Desktop:
- Remote: Customize > Connectors (same as claude.ai)
- Local: Settings > Developer > Edit Config, or Settings > Extensions for .mcpb files
~/Library/Application Support/Claude/claude_desktop_config.json(macOS) or%APPDATA%\Claude\claude_desktop_config.json(Windows), local servers only
ChatGPT setup
Add the endpoint above in ChatGPT:
- ChatGPT web: Plugins > Add custom MCP server, then configure authentication and accept the risk warning
Windsurf setup
Add the endpoint above in Windsurf:
~/.config/devin/mcp_config.json(%APPDATA%\devin\mcp_config.jsonon Windows),serverUrlorurl- Cascade panel > ... > MCPs > Open MCP config file
Gemini CLI setup
Add the endpoint above in Gemini CLI:
gemini mcp add --transport http <name> <url>~/.gemini/settings.json(user) or.gemini/settings.json(project),mcpServers
MCP SDK setup
Add the endpoint above in MCP SDK:
- Programmatic:
new Client(...).connect(new StreamableHTTPClientTransport(url))
Notes for every client
- Optional bearer token alternative: Store JINA_API_KEY in your operating system keychain, secret manager, or protected environment; never commit the value. The Authorization header syntax is Bearer <JINA_API_KEY>.
Client compatibility
| Client | Status | Why |
|---|---|---|
| Claude Code | Supported | Claude Code supports Streamable HTTP servers and servers without authentication or bearer-token headers. |
| Codex | Supported | Codex supports Streamable HTTP servers and servers without authentication or bearer-token headers. |
| Cursor | Supported | Cursor supports Streamable HTTP servers and servers without authentication or bearer-token headers. |
| VS Code | Supported | VS Code supports Streamable HTTP servers and servers without authentication or bearer-token headers. |
| Claude | Supported | Claude supports Streamable HTTP servers and servers without authentication or bearer-token headers. |
| Claude Desktop | Supported | Claude Desktop supports Streamable HTTP servers and servers without authentication or bearer-token headers. |
| ChatGPT | Partial | Stateful routing needs operational care: ChatGPT can preserve MCP sessions, but the deployment must route a session consistently and retain its state. |
| Windsurf | Supported | Windsurf supports Streamable HTTP servers and servers without authentication or bearer-token headers. |
| Gemini CLI | Supported | Gemini CLI supports Streamable HTTP servers and servers without authentication or bearer-token headers. |
| MCP SDK | Supported | MCP SDK supports Streamable HTTP servers and servers without authentication or bearer-token headers. |
Computed from this server's validated transport, protocol and authentication against documented client support. Checks the catalog has not observed are not counted.
Latest validation evidence
- Validation status
- Online when last tested
- Validation checked at
- Oct 26, 2026 at 11:06 AM
- Validation detail
- Negotiated stateful MCP 2025-11-25 at https://mcp.jina.ai/v1; detected transport streamable-http; authentication none
Tool inventory
What the catalog validator observed on at https://mcp.jina.ai/v1 without credentials. The live server may have changed since; connect in the Playground for the current list.
Tools provided by Jina AI 12
capture_screenshot_urlNo outputSchemaScreenshot a page as base64 JPEG. Use when the page must be seen rather than read.
Input
firstScreenOnly?: boolean, return_url?: boolean, url: stringfirstScreenOnly?: booleanoptionalCapture only the first screen instead of the full page. Faster.
return_url?: booleanoptionalReturn URLs instead of base64 images.
url: stringrequired
deduplicate_stringsNo outputSchemaSelect the top-k semantically distinct strings from a list, dropping near-duplicates.
Input
k?: integer, strings: arrayk?: integeroptionalHow many to keep. Omit to pick k automatically from diminishing returns.
strings: arrayrequiredStrings to deduplicate, up to 1000.
extract_pdfNo outputSchemaExtract figures, tables and equations from a PDF as images, by arXiv id or URL.
Input
id?: string, max_edge?: number, type?: string, url?: stringid?: stringoptionalarXiv id, e.g. '2301.12345'. Give id or url.
max_edge?: numberoptionalLongest image edge in pixels, default 1024.
type?: stringoptionalComma-separated types to keep: figure, table, equation. Default all.
url?: stringoptionalPDF URL. Give id or url.
guess_datetime_urlNo outputSchemaGuess when a page was published or last updated, with a confidence score. Checks HTTP headers, metadata, Schema.org, visible dates, feeds and sitemaps.
Input
url: stringurl: stringrequired
primerNo outputSchemaCurrent time, user location and network environment for the session. Use before answering anything time- or location-dependent.
Input No parameters
read_urlNo outputSchemaFetch a URL (page or PDF) as clean markdown. Pass `question` to get only the passages answering it instead of the whole page - far cheaper than reading the full body into context.
Input
chunk_size?: integer, ocr?: boolean, page?: integer, question?: string, topk?: integer, url: any, withAllImages?: boolean, withAllLinks?: booleanchunk_size?: integeroptionalPassage size in words, default 100. Larger gives more surrounding context, smaller pinpoints the answer. Comparable across scripts. Needs `question`.
ocr?: booleanoptionalRead the rendered page as an image with jina-ocr-v1 instead of its HTML. Use for scanned documents and PDFs whose text is not in the markup, and to keep formulas and table structure. Parses ONE page per call, page 1 unless `page` says otherwise, and costs about 40x the tokens per page, so leave off unless the HTML path has failed you.
page?: integeroptionalWhich page the OCR pass should parse, 1-based. Needs `ocr`; the HTML path returns the whole document at once.
question?: stringoptionalReturn only the passages answering this question, instead of the full body. Omit for the whole page.
topk?: integeroptionalPassages to return, default 1. Needs `question`.
url: anyrequiredPage or PDF URL, or up to 5 URLs to read in parallel.
withAllImages?: booleanoptionalAlso return every image on the page.
withAllLinks?: booleanoptionalAlso return every link on the page.
search_arxivNo outputSchemaSearch arXiv preprints (physics, maths, CS, quantitative biology and finance).
Input
num?: integer, query: any, tbs?: stringnum?: integeroptionalquery: anyrequiredtbs?: stringoptionalAge limit: qdr:h, qdr:d, qdr:w, qdr:m, qdr:y (hour to year).
search_imagesNo outputSchemaSearch the web for images. Returns base64 JPEGs by default.
Input
gl?: string, hl?: string, location?: string, num?: integer, query: string, return_url?: boolean, tbs?: stringgl?: stringoptionalCountry code, e.g. 'de'.
hl?: stringoptionalLanguage code, e.g. 'zh-cn'.
location?: stringoptionalnum?: integeroptionalquery: stringrequiredreturn_url?: booleanoptionalReturn URLs and metadata instead of base64 images.
tbs?: stringoptionalAge limit: qdr:h, qdr:d, qdr:w, qdr:m, qdr:y (hour to year).
search_jina_blogNo outputSchemaSearch Jina AI's news and blog at jina.ai/news: product announcements, model releases, technical write-ups.
Input
num?: integer, query: any, tbs?: stringnum?: integeroptionalquery: anyrequiredtbs?: stringoptionalAge limit: qdr:h, qdr:d, qdr:w, qdr:m, qdr:y (hour to year).
search_ssrnNo outputSchemaSearch SSRN working papers (social science, economics, law, finance, management).
Input
num?: integer, query: any, tbs?: stringnum?: integeroptionalquery: anyrequiredtbs?: stringoptionalAge limit: qdr:h, qdr:d, qdr:w, qdr:m, qdr:y (hour to year).
search_webNo outputSchemaSearch the web. Returns titles, URLs and search-engine snippets.
Input
gl?: string, hl?: string, location?: string, num?: integer, query: any, tbs?: stringgl?: stringoptionalCountry code, e.g. 'de'.
hl?: stringoptionalLanguage code, e.g. 'zh-cn'.
location?: stringoptionalnum?: integeroptionalquery: anyrequiredtbs?: stringoptionalAge limit: qdr:h, qdr:d, qdr:w, qdr:m, qdr:y (hour to year).
sort_by_relevanceNo outputSchemaRerank documents by relevance to a query, using Jina Reranker.
Input
documents: array, query: string, top_n?: integerdocuments: arrayrequiredDocuments to rank, up to 1024.
query: stringrequiredtop_n?: integeroptional