Skip to main content
Glama
h-lu
by h-lu

read_crossref_paper

Explains that CrossRef provides metadata only, not full-text papers, and directs users to alternative tools for accessing paper content.

Instructions

CrossRef does NOT support direct paper reading.

CrossRef provides metadata only, not full-text content. INSTEAD (try in order): 1. read_arxiv_paper(id) - if arXiv preprint 2. read_scihub_paper(doi) - if published before 2023 3. read_semantic_paper(id) - last resort Args: paper_id: DOI (e.g., '10.1038/nature12373'). save_path: Unused. Returns: Error message explaining alternatives.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
paper_idYes
save_pathNo

Implementation Reference

  • Primary handler function for the MCP tool 'read_crossref_paper'. Registered via @mcp.tool() decorator, which also generates the input schema from type hints and docstring. Implements tool logic by delegating to generic _read helper.
    @mcp.tool() async def read_crossref_paper(paper_id: str, save_path: Optional[str] = None) -> str: """CrossRef does NOT support direct paper reading. CrossRef provides metadata only, not full-text content. INSTEAD (try in order): 1. read_arxiv_paper(id) - if arXiv preprint 2. read_scihub_paper(doi) - if published before 2023 3. read_semantic_paper(id) - last resort Args: paper_id: DOI (e.g., '10.1038/nature12373'). save_path: Unused. Returns: Error message explaining alternatives. """ return await _read('crossref', paper_id, save_path)
  • Generic _read helper used by multiple read_*_paper tools. For 'crossref', it retrieves CrossRefSearcher instance and calls its read_paper method, handling exceptions.
    async def _read( searcher_name: str, paper_id: str, save_path: Optional[str] = None ) -> str: """通用阅读函数""" if save_path is None: save_path = get_download_path() searcher = SEARCHERS.get(searcher_name) if not searcher: return f"Error: Unknown searcher {searcher_name}" try: return searcher.read_paper(paper_id, save_path) except NotImplementedError as e: return str(e) except Exception as e: logger.error(f"Read failed for {searcher_name}: {e}") return f"Error reading paper: {str(e)}"
  • Core logic in CrossRefSearcher.read_paper method, which returns a detailed error message explaining that CrossRef only provides metadata, not full-text, and suggests alternatives.
    def read_paper(self, paper_id: str, save_path: str) -> str: """ CrossRef doesn't provide direct paper content access. Args: paper_id: DOI of the paper save_path: Directory for potential PDF storage (unused) Returns: str: Error message indicating PDF reading is not supported """ message = ("CrossRef papers cannot be read directly through this tool. " "CrossRef is a citation database that provides metadata about academic papers. " "Only metadata and abstracts are available through CrossRef's API. " "To access the full text, please use the paper's DOI or URL to visit the publisher's website.") return message

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/h-lu/paper-search-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server