X Literature MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| X_LIT_PYTHON | No | Python executable with PyMuPDF. Default: python (Windows) / python3. | |
| X_LIT_PDF_ROOT | Yes | Absolute path of the PDF folder (scanned recursively; symlinks skipped). | |
| X_LIT_CACHE_DIR | No | Absolute path for the derived cache. Default: <OS temp>/x-literature-mcp-cache. Must not be inside the PDF folder. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_papersA | List PDFs in the configured literature folder (de-duplicated by SHA-256). Returns paper_id, file name, title candidate, page count, parse status. Never returns full text. Indexes not-yet-parsed PDFs on first call. |
| get_paper_structureA | Page count, native PDF bookmarks (if any), inferred section headings with pages, per-page text coverage and quality flags, References location. Inferred items are marked inferred and may be wrong. |
| read_paper_pagesA | Text of a page range (1-based, max 10 pages per call), each page kept separate with its real page number. Output is bounded by max_chars; when truncated, 'next' tells you exactly where to continue (start_page + char_offset). PDF text layer only: verify formulas/tables with render_paper_page. |
| render_paper_pageA | Render ONE page as a PNG image (for checking formulas, tables, figures, two-column reading order). scale 0.5–3 (default 1.5); longest edge capped at 2400 px. |
| get_paper_referencesC | Reference-list entries as printed (raw_text) with PDF page numbers, plus candidate fields (number/authors/year/title/venue/DOI) parsed by deterministic rules. Fields are unverified candidates (fields.year only when quality.year=verified_by_pattern; otherwise see candidates/issues); text left out as another article's (continuation-marker evidence) is listed in 'excluded' with its page. A citation says nothing about inheritance or experimental comparison. |
| search_papersA | Keyword search over page text (Chinese/English substring, whitespace- and width-insensitive; multiple space-separated terms must all occur on the same page). Returns paper_id + page + snippet; re-read hits with read_paper_pages. Query ≤ 200 chars. |
| refresh_indexA | Rescan the PDF folder and (re)build the local derived cache. Never modifies PDFs. force=true re-parses every paper; otherwise only new/changed files are parsed. One failing file does not stop the others. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 7 tools
Each tool has a clearly distinct role, from listing and searching to reading, rendering, structural inspection, reference extraction, and index maintenance. The potentially overlapping read and render tools are explicitly differentiated as text extraction versus visual verification.
All seven tools use consistent lowercase snake_case with a predictable verb_noun pattern. Singular and plural resource names appropriately reflect whether each operation handles one page, multiple pages, or multiple papers.
Seven tools are well scoped for a local PDF literature server. Each earns its place without fragmenting simple operations or introducing redundant convenience tools.
The set covers the complete read-only literature workflow: corpus discovery, indexing, keyword search, paginated reading, visual inspection, document structure, and reference extraction. There are no obvious dead ends for its apparent purpose, and filesystem-based collection changes are handled through refresh_index.