Skip to main content
Glama

get_author_publications

Retrieve detailed publication data for a specific author using fuzzy matching. Specify author name, similarity threshold, and optional parameters like max results and BibTeX inclusion. Output includes publication count, top venues, years, and types.

Instructions

Retrieve publication details for a specific author with fuzzy matching. Arguments:

  • author_name (string, required): Full or partial author name (case-insensitive).

  • similarity_threshold (number, required): A float between 0 and 1 where 1.0 means an exact match.

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

  • include_bibtex (boolean, optional): Whether to include BibTeX entries in the results. Default is false. Returns a dictionary with keys: name, publication_count, publications, and stats (which includes top venues, years, and types).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
author_nameYes
include_bibtexNo
max_resultsNo
similarity_thresholdYes

Implementation Reference

  • Core implementation of get_author_publications: performs fuzzy author matching on DBLP search results, filters by similarity, adds stats and optional BibTeX.
    def get_author_publications( author_name: str, similarity_threshold: float, max_results: int = 20, include_bibtex: bool = False, ) -> dict[str, Any]: """ Get publication information for a specific author with fuzzy matching. Parameters: author_name (str): Author name to search for. similarity_threshold (float): Threshold for fuzzy matching (0-1). max_results (int, optional): Maximum number of results to return. Default is 20. include_bibtex (bool, optional): Whether to include BibTeX entries. Default is False. Returns: Dict[str, Any]: Dictionary with author publication information. """ logger.info( f"Getting publications for author: {author_name} with similarity threshold {similarity_threshold}" ) author_query = f"author:{author_name}" publications = search(author_query, max_results=max_results * 2) filtered_publications = [] for pub in publications: best_ratio = 0.0 for candidate in pub.get("authors", []): ratio = difflib.SequenceMatcher(None, author_name.lower(), candidate.lower()).ratio() if ratio > best_ratio: best_ratio = ratio if best_ratio >= similarity_threshold: filtered_publications.append(pub) filtered_publications = filtered_publications[:max_results] # Fetch BibTeX entries if requested if include_bibtex: for pub in filtered_publications: if "dblp_key" in pub and pub["dblp_key"]: pub["bibtex"] = fetch_bibtex_entry(pub["dblp_key"]) venues = Counter([p.get("venue", "") for p in filtered_publications]) years = Counter([p.get("year", "") for p in filtered_publications]) types = Counter([p.get("type", "") for p in filtered_publications]) return { "name": author_name, "publication_count": len(filtered_publications), "publications": filtered_publications, "stats": { "venues": venues.most_common(5), "years": years.most_common(5), "types": dict(types), }, }
  • MCP server dispatch handler for the tool: argument validation, calls core function, formats response as TextContent.
    case "get_author_publications": if "author_name" not in arguments or "similarity_threshold" not in arguments: return [ types.TextContent( type="text", text="Error: Missing required parameter 'author_name' or 'similarity_threshold'", ) ] include_bibtex = arguments.get("include_bibtex", False) result = get_author_publications( author_name=arguments.get("author_name"), similarity_threshold=arguments.get("similarity_threshold"), max_results=arguments.get("max_results", 20), include_bibtex=include_bibtex, ) pub_count = result.get("publication_count", 0) publications = result.get("publications", []) if include_bibtex: return [ types.TextContent( type="text", text=f"Found {pub_count} publications for author {arguments['author_name']}:\n\n{format_results_with_bibtex(publications)}", ) ] else: return [ types.TextContent( type="text", text=f"Found {pub_count} publications for author {arguments['author_name']}:\n\n{format_results(publications)}", ) ]
  • Tool schema definition including input schema, description, registered via list_tools() method.
    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"], }, ),
  • Registration of all tools including get_author_publications in the @server.list_tools() handler.
    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"], }, ), ]

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