theses-mcp

theses-mcp

MCP server that enables searching and retrieving Czech university theses from theses.cz, including full-text search, metadata, and direct PDF downloads with optional cookie-based authentication.

Category
Visit Server

README

theses-mcp

MCP server for theses.cz — the Czech national registry of university theses (~1M records from most Czech universities, operated by the Faculty of Informatics, Masaryk University).

Gives any MCP client full-text search over Czech bachelor/master/doctoral theses, their metadata, and direct links to the publicly readable PDFs.

Tools

Tool What it does
search(query, limit=10) Search records and thesis full texts. Supports theses.cz operators (AND, OR, "phrase"). Paginates by 10, max 50.
detail(id_or_url) Full record: author, CS/EN title and abstract, keywords, supervisor and opponent, defense date, full-text availability, school archive link, related theses.
fulltext(id_or_url) Follows the record into the school's own repository and lists the downloadable files — the thesis PDF plus supervisor/opponent reports.

search returns two kinds of hits:

  • kind="record" — a catalogue record; url points to the detail page
  • kind="fulltext" — a match inside the thesis PDF; pdf_url is a direct link to the full text, which your client can read directly

Getting the PDF

theses.cz stores metadata only — the files live in each school's own system. 64 institutions are registered, but they are not 64 different problems: the large majority run the same IS software as theses.cz itself (is.muni.cz, is.slu.cz, is.ambis.cz, is.vsfs.cz, is.jamu.cz, …), with vskp.vse.cz and a few others alongside. fulltext follows the record into whichever one it is and lists the documents on offer:

{
  "access": ["světu"],
  "archive_url": "https://is.muni.cz/th/avwwh/",
  "files": [
    {"label": "Plný text práce",   "url": "https://is.muni.cz/th/avwwh/Moutelik_Bakalarska_Prace_Final.pdf"},
    {"label": "Posudek vedoucího", "url": "https://is.muni.cz/th/avwwh/posudek_vedouciho_Minjarikova.pdf"}
  ]
}

access does not decide what you can download. It describes the copy held by theses.cz, not the school's own policy. The VŠE thesis pl09jx is marked "autentizovaným zaměstnancům ze stejné školy/fakulty" on theses.cz while vskp.vse.cz links its 7.2 MB PDF to anyone — so always look at files, not at access.

That link had no .pdf in the URL; the filename was only in the link text. Files are therefore matched by href and by label, and extensionless URLs are confirmed with a HEAD request (confirmed, content_type) rather than optimistically reported as PDFs.

What actually comes back

Measured over ~500 records from 20 unrelated subject searches, covering 17 distinct repository hosts:

repository schools result
is.muni.cz Masaryk University works — full text, both reviewer reports, often DOCX and TXT
vskp.vse.cz, www.vse.cz VŠE Praha works — thesis, appendix, both reports (extensionless /zp/ URLs)
hdl.handle.net DSpace repositories, e.g. VŠB-TUO works — handle redirects to the repository, bitstreams confirmed
is.ambis.cz, is.vsfs.cz, is.slu.cz, is.caritas-vos.cz, is.vstecb.cz, is.vszdrav.cz, is.cevro.cz, is.ucp.cz, is.jamu.cz, is.jabok.cz AMBIS, VŠFS, SU Opava, CARITAS, VŠTE, VŠ zdravotnická, CEVRO, UCP, JAMU, JABOK CAPTCHA for anonymous visitors
is.vsh.cz, is.vshe.cz VŠH, VŠHE broken TLS certificate (hostname mismatch)
evskp.uhk.cz Hradec Králové different system, not implemented
stag.upol.cz, portal.ujep.cz UPOL, UJEP STAG portal, not implemented

theses.cz lists 64 participating institutions; roughly twenty never appeared in the sample, so their repositories are untested rather than known-good.

The CAPTCHA is not bot detection — is.muni.cz serves this same client fine. Those schools gate anonymous access, and a human in a browser meets the same wall. This server reports it and does not try to defeat it.

Using your own login

The way past a gate is to be someone entitled to pass it. Theses marked "všem autentizovaným" (any authenticated user) and repositories that gate anonymous visitors both open up once you are logged in. Log in through your browser, copy the session cookie and hand it over per host:

THESES_COOKIES='{"theses.cz": "__Host-issession=…", "is.vsfs.cz": "__Host-issession=…"}'

Cookies are scoped to their own domain and are never sent to any other host. This gets you what your account is entitled to — nothing more.

Known gaps

  • STAG portals (stag.upol.cz, same software at ZČU, UPCE, JČU, TUL) put the download behind a session-bound portlet flow with pc_phs and _csrf parameters, and UPOL does not expose the STAG web service at the usual /ws/services/rest2/ path.
  • evskp.uhk.cz and portal.ujep.cz are their own systems, unparsed.
  • is.vsh.cz, is.vshe.cz serve certificates that do not match their hostname. The session verifies TLS and so refuses them; turning verification off would fix the symptom and remove the guarantee that you are talking to the school at all.

PRs welcome.

Install

Claude Code:

claude mcp add theses -s user -- uvx --from git+https://github.com/koprjaa/theses-mcp theses-mcp

Any other client, in mcpServers:

{
  "theses": {
    "command": "uvx",
    "args": ["--from", "git+https://github.com/koprjaa/theses-mcp", "theses-mcp"]
  }
}

From a clone, use pip install -e . and command: "theses-mcp".

Example

> find Czech theses about Midjourney and copyright

search("midjourney AND autorství")   → 12 hits, incl. public PDFs
detail("c5uqln")                     → abstract, keywords, supervisor, defense date
fulltext("7lfo74")                   → PDF, DOCX and both reviewer reports

Notes

theses.cz is scraped, not queried through an API — it has no public one. Two consequences:

  • Session bootstrap. The first request returns a 117-byte <meta refresh> stub; the server retries once with the __Host-issession cookie it just received.
  • Markup drift breaks parsing. python theses_mcp.py --selftest runs a live check against known records and fails loudly when the selectors stop matching. Run it first when results look empty.

Be a decent citizen with request rates.

License

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured