Skip to main content
Glama

search

Search the DBLP computer science bibliography for publications using a boolean query string. Filter results by year range, venue, and include BibTeX entries. Retrieve publication details such as title, authors, and DOI.

Instructions

Search DBLP for publications using a boolean query string. Arguments:

  • query (string, required): A query string that may include boolean operators 'and' and 'or' (case-insensitive). For example, 'Swin and Transformer'. Parentheses are not supported.

  • max_results (number, optional): Maximum number of publications to return. Default is 10.

  • year_from (number, optional): Lower bound for publication year.

  • year_to (number, optional): Upper bound for publication year.

  • venue_filter (string, optional): Case-insensitive substring filter for publication venues (e.g., 'iclr').

  • include_bibtex (boolean, optional): Whether to include BibTeX entries in the results. Default is false. Returns a list of publication objects including title, authors, venue, year, type, doi, ee, and url.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
include_bibtexNo
max_resultsNo
queryYes
venue_filterNo
year_fromNo
year_toNo

Implementation Reference

  • Handler logic for the 'search' MCP tool within the call_tool method. Validates input, calls dblp_client.search, formats results with optional BibTeX, and returns text content.
    case "search":
        if "query" not in arguments:
            return [
                types.TextContent(
                    type="text", text="Error: Missing required parameter 'query'"
                )
            ]
        include_bibtex = arguments.get("include_bibtex", False)
        result = search(
            query=arguments.get("query"),
            max_results=arguments.get("max_results", 10),
            year_from=arguments.get("year_from"),
            year_to=arguments.get("year_to"),
            venue_filter=arguments.get("venue_filter"),
            include_bibtex=include_bibtex,
        )
        if include_bibtex:
            return [
                types.TextContent(
                    type="text",
                    text=f"Found {len(result)} publications matching your query:\n\n{format_results_with_bibtex(result)}",
                )
            ]
        else:
            return [
                types.TextContent(
                    type="text",
                    text=f"Found {len(result)} publications matching your query:\n\n{format_results(result)}",
                )
            ]
  • Schema definition for the 'search' tool, including detailed description and input schema, returned by list_tools().
        name="search",
        description=(
            "Search DBLP for publications using a boolean query string.\n"
            "Arguments:\n"
            "  - query (string, required): A query string that may include boolean operators 'and' and 'or' (case-insensitive).\n"
            "    For example, 'Swin and Transformer'. Parentheses are not supported.\n"
            "  - max_results (number, optional): Maximum number of publications to return. Default is 10.\n"
            "  - year_from (number, optional): Lower bound for publication year.\n"
            "  - year_to (number, optional): Upper bound for publication year.\n"
            "  - venue_filter (string, optional): Case-insensitive substring filter for publication venues (e.g., 'iclr').\n"
            "  - include_bibtex (boolean, optional): Whether to include BibTeX entries in the results. Default is false.\n"
            "Returns a list of publication objects including title, authors, venue, year, type, doi, ee, and url."
        ),
        inputSchema={
            "type": "object",
            "properties": {
                "query": {"type": "string"},
                "max_results": {"type": "number"},
                "year_from": {"type": "number"},
                "year_to": {"type": "number"},
                "venue_filter": {"type": "string"},
                "include_bibtex": {"type": "boolean"},
            },
            "required": ["query"],
        },
    ),
  • Registration of the 'search' tool via the list_tools() handler, which returns all available tools including 'search'.
    @server.list_tools()
    async def list_tools() -> list[types.Tool]:
        """List all available DBLP tools with detailed descriptions."""
        return [
            types.Tool(
                name="get_instructions",
                description=(
                    "Get detailed DBLP usage instructions. Key points:\n"
                    "- Batch searches in parallel (5-10 at a time) for efficiency\n"
                    "- Add entries immediately after each search result (don't batch add_bibtex_entry calls)\n"
                    "- Use author+year for best results: search('Vaswani 2017') not just title\n"
                    "- Copy dblp_key EXACTLY from search results to add_bibtex_entry\n"
                    "- Export once at the end with export_bibtex\n"
                    "Call this tool for complete workflow details, search strategies, and examples."
                ),
                inputSchema={"type": "object", "properties": {}},
            ),
            types.Tool(
                name="search",
                description=(
                    "Search DBLP for publications using a boolean query string.\n"
                    "Arguments:\n"
                    "  - query (string, required): A query string that may include boolean operators 'and' and 'or' (case-insensitive).\n"
                    "    For example, 'Swin and Transformer'. Parentheses are not supported.\n"
                    "  - max_results (number, optional): Maximum number of publications to return. Default is 10.\n"
                    "  - year_from (number, optional): Lower bound for publication year.\n"
                    "  - year_to (number, optional): Upper bound for publication year.\n"
                    "  - venue_filter (string, optional): Case-insensitive substring filter for publication venues (e.g., 'iclr').\n"
                    "  - include_bibtex (boolean, optional): Whether to include BibTeX entries in the results. Default is false.\n"
                    "Returns a list of publication objects including title, authors, venue, year, type, doi, ee, and url."
                ),
                inputSchema={
                    "type": "object",
                    "properties": {
                        "query": {"type": "string"},
                        "max_results": {"type": "number"},
                        "year_from": {"type": "number"},
                        "year_to": {"type": "number"},
                        "venue_filter": {"type": "string"},
                        "include_bibtex": {"type": "boolean"},
                    },
                    "required": ["query"],
                },
            ),
            types.Tool(
                name="fuzzy_title_search",
                description=(
                    "Search DBLP for publications with fuzzy title matching.\n"
                    "Arguments:\n"
                    "  - title (string, required): Full or partial title of the publication (case-insensitive).\n"
                    "  - similarity_threshold (number, required): A float between 0 and 1 where 1.0 means an exact match.\n"
                    "  - max_results (number, optional): Maximum number of publications to return. Default is 10.\n"
                    "  - year_from (number, optional): Lower bound for publication year.\n"
                    "  - year_to (number, optional): Upper bound for publication year.\n"
                    "  - venue_filter (string, optional): Case-insensitive substring filter for publication venues.\n"
                    "  - include_bibtex (boolean, optional): Whether to include BibTeX entries in the results. Default is false.\n"
                    "Returns a list of publication objects sorted by title similarity score."
                ),
                inputSchema={
                    "type": "object",
                    "properties": {
                        "title": {"type": "string"},
                        "similarity_threshold": {"type": "number"},
                        "max_results": {"type": "number"},
                        "year_from": {"type": "number"},
                        "year_to": {"type": "number"},
                        "venue_filter": {"type": "string"},
                        "include_bibtex": {"type": "boolean"},
                    },
                    "required": ["title", "similarity_threshold"],
                },
            ),
            types.Tool(
                name="get_author_publications",
                description=(
                    "Retrieve publication details for a specific author with fuzzy matching.\n"
                    "Arguments:\n"
                    "  - author_name (string, required): Full or partial author name (case-insensitive).\n"
                    "  - similarity_threshold (number, required): A float between 0 and 1 where 1.0 means an exact match.\n"
                    "  - max_results (number, optional): Maximum number of publications to return. Default is 20.\n"
                    "  - include_bibtex (boolean, optional): Whether to include BibTeX entries in the results. Default is false.\n"
                    "Returns a dictionary with keys: name, publication_count, publications, and stats (which includes top venues, years, and types)."
                ),
                inputSchema={
                    "type": "object",
                    "properties": {
                        "author_name": {"type": "string"},
                        "similarity_threshold": {"type": "number"},
                        "max_results": {"type": "number"},
                        "include_bibtex": {"type": "boolean"},
                    },
                    "required": ["author_name", "similarity_threshold"],
                },
            ),
            types.Tool(
                name="get_venue_info",
                description=(
                    "Retrieve information about a publication venue from DBLP.\n"
                    "Arguments:\n"
                    "  - venue_name (string, required): Venue name or abbreviation (e.g., 'ICLR', 'NeurIPS', or full name).\n"
                    "Returns a dictionary with fields:\n"
                    "  - venue: Full venue title\n"
                    "  - acronym: Venue acronym/abbreviation (if available)\n"
                    "  - type: Venue type (e.g., 'Conference or Workshop', 'Journal', 'Repository')\n"
                    "  - url: Canonical DBLP URL for the venue\n"
                    "Note: Publisher, ISSN, and other metadata are not available through this endpoint."
                ),
                inputSchema={
                    "type": "object",
                    "properties": {"venue_name": {"type": "string"}},
                    "required": ["venue_name"],
                },
            ),
            types.Tool(
                name="calculate_statistics",
                description=(
                    "Calculate statistics from a list of publication results.\n"
                    "Arguments:\n"
                    "  - results (array, required): An array of publication objects, each with at least 'title', 'authors', 'venue', and 'year'.\n"
                    "Returns a dictionary with:\n"
                    "  - total_publications: Total count.\n"
                    "  - time_range: Dictionary with 'min' and 'max' publication years.\n"
                    "  - top_authors: List of tuples (author, count) sorted by count.\n"
                    "  - top_venues: List of tuples (venue, count) sorted by count (empty venue is treated as '(empty)')."
                ),
                inputSchema={
                    "type": "object",
                    "properties": {"results": {"type": "array"}},
                    "required": ["results"],
                },
            ),
            types.Tool(
                name="add_bibtex_entry",
                description=(
                    "Add a BibTeX entry to the collection for later export. Call this once for each paper you want to export.\n"
                    "Arguments:\n"
                    "  - dblp_key (string, required): The DBLP key from search results (e.g., 'conf/nips/VaswaniSPUJGKP17').\n"
                    "  - citation_key (string, required): The citation key to use in the .bib file (e.g., 'Vaswani2017').\n"
                    "Workflow:\n"
                    "  1. Fetches BibTeX directly from DBLP using the provided key\n"
                    "  2. Replaces the citation key with your custom key\n"
                    "  3. Adds to collection (duplicate citation_key will be overwritten)\n"
                    "  4. Returns count of entries currently in collection\n"
                    "After adding all entries, call export_bibtex to save them to a .bib file."
                ),
                inputSchema={
                    "type": "object",
                    "properties": {
                        "dblp_key": {"type": "string"},
                        "citation_key": {"type": "string"},
                    },
                    "required": ["dblp_key", "citation_key"],
                },
            ),
            types.Tool(
                name="export_bibtex",
                description=(
                    "Export all collected BibTeX entries to a .bib file. Call this after adding all entries with add_bibtex_entry.\n"
                    "Workflow:\n"
                    "  1. Saves all collected entries to a .bib file at the specified path\n"
                    "  2. Clears the collection for next export\n"
                    "  3. Returns the full path to the exported file\n"
                    "Returns error if no entries have been added yet."
                ),
                inputSchema={
                    "type": "object",
                    "properties": {
                        "path": {
                            "type": "string",
                            "description": "Absolute path for the .bib file (e.g., '/path/to/refs.bib'). The .bib extension is added automatically if missing. Parent directories are created if needed.",
                        },
                    },
                    "required": ["path"],
                },
            ),
        ]
  • Core helper function implementing the DBLP search logic: API calls, query parsing, filtering, and optional BibTeX fetching. Called by the MCP tool handler.
    def search(
        query: str,
        max_results: int = 10,
        year_from: int | None = None,
        year_to: int | None = None,
        venue_filter: str | None = None,
        include_bibtex: bool = False,
    ) -> list[dict[str, Any]]:
        """
        Search DBLP using their public API.
    
        Parameters:
            query (str): The search query string.
            max_results (int, optional): Maximum number of results to return. Default is 10.
            year_from (int, optional): Lower bound for publication year.
            year_to (int, optional): Upper bound for publication year.
            venue_filter (str, optional): Case-insensitive substring filter
                for publication venues.
            include_bibtex (bool, optional): Whether to include BibTeX entries
                in the results. Default is False.
    
        Returns:
            List[Dict[str, Any]]: A list of publication dictionaries.
        """
        query_lower = query.lower()
        if "(" in query or ")" in query:
            logger.warning(
                "Parentheses are not supported in boolean queries. "
                "They will be treated as literal characters."
            )
        results = []
        if " or " in query_lower:
            subqueries = [q.strip() for q in query_lower.split(" or ") if q.strip()]
            seen = set()
            for q in subqueries:
                for pub in _fetch_publications(q, max_results):
                    identifier = (pub.get("title"), pub.get("year"))
                    if identifier not in seen:
                        results.append(pub)
                        seen.add(identifier)
        else:
            results = _fetch_publications(query, max_results)
    
        filtered_results = []
        for result in results:
            if year_from or year_to:
                year = result.get("year")
                if year:
                    try:
                        year = int(year)
                        if (year_from and year < year_from) or (year_to and year > year_to):
                            continue
                    except (ValueError, TypeError):
                        pass
            if venue_filter:
                venue = result.get("venue", "")
                if venue_filter.lower() not in venue.lower():
                    continue
            filtered_results.append(result)
    
        if not filtered_results:
            logger.info("No results found. Consider revising your query syntax.")
    
        filtered_results = filtered_results[:max_results]
    
        # Fetch BibTeX entries if requested
        if include_bibtex:
            for result in filtered_results:
                if "dblp_key" in result and result["dblp_key"]:
                    result["bibtex"] = fetch_bibtex_entry(result["dblp_key"])
    
        return filtered_results
Install Server

Other Tools

Related Tools

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/szeider/mcp-dblp'

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