Skip to main content
Glama
haoxiangsnr

bib-enrich-mcp

by haoxiangsnr
README.md
# bib-enrich-mcp

[![PyPI version](https://badge.fury.io/py/bib-enrich-mcp.svg)](https://badge.fury.io/py/bib-enrich-mcp)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

Writing a paper and your `.bib` file is a mess? This tool lets AI automatically complete your citations — fill in missing metadata, find publication venues, add DOIs, and even discover if a preprint has been formally published.

## Features

- **Automatic metadata scraping** from multiple sources:
  - arXiv API
  - DBLP API
  - CrossRef API
- **BibTeX parsing and writing** with full field support
- **Batch processing** of entire .bib files
- **MCP integration** for use with AI assistants

## Installation

```bash
# Or install with uv (Recommended)
uv tool install bib-enrich-mcp

# Install from PyPI
pip install bib-enrich-mcp

# Or clone and install locally
git clone https://github.com/haoxiangsnr/bib-enrich-mcp.git
cd bib-enrich-mcp
uv sync
```

## Quick Start

### Step 1: Configure MCP Client

Add the server to your MCP client (e.g., Cherry Studio, Claude Desktop, Cursor):

```json
{
  "mcpServers": {
    "bib-enrich": {
      "command": "bib-enrich-mcp"
    }
  }
}
```

### Step 2: Enable the MCP Server

In your MCP client, enable the `bib-enrich` server. Look for a tools icon (usually a wrench) in the chat interface.

### Step 3: Start Using

Now you can ask the AI to help with your bibliography. Example prompts:

```
Help me find the complete citation for: Attention Is All You Need
```

```
Enrich this BibTeX entry with arXiv ID 2401.12345
```

```
Process my references.bib file and fill in missing metadata
```

The AI will automatically call the appropriate tools to fetch metadata from arXiv, DBLP, and CrossRef.

## Usage

### As an MCP Server

Add to your MCP client configuration:

```json
{
  "mcpServers": {
    "bib-enrich": {
      "command": "bib-enrich-mcp"
    }
  }
}
```

### Running the Server

```bash
bib-enrich-mcp
```

## API Documentation

### MCP Tools

#### `mcp_enrich_bib_entry`

Enrich a single bibliography entry by scraping metadata from academic sources.

**Parameters:**
- `cite_key` (required): The citation key for the entry
- `title` (optional): Paper title to search for
- `arxiv_id` (optional): arXiv ID (e.g., "2401.12345")
- `doi` (optional): DOI of the paper

**Returns:** BibTeX string with enriched metadata

**Example:**
```python
result = await mcp_enrich_bib_entry(
    cite_key="vaswani2017attention",
    title="Attention Is All You Need"
)
```

#### `mcp_enrich_bib_file`

Enrich all entries in a BibTeX file.

**Parameters:**
- `file_path` (required): Path to the .bib file

**Returns:** Summary of enriched entries

**Example:**
```python
result = await mcp_enrich_bib_file("/path/to/references.bib")
# Returns: "Enriched 5/10 entries in /path/to/references.bib"
```

### Python API

You can also use the library directly in Python:

```python
from bib_enrich_mcp.bib_parser import parse_bib_file, write_bib_file
from bib_enrich_mcp.scrapers import scrape_metadata

# Parse a bib file
entries = parse_bib_file("references.bib")

# Scrape metadata for a paper
results = await scrape_metadata(
    title="Attention Is All You Need",
    arxiv_id="1706.03762"
)
```

## Supported Metadata Sources

| Source   | Search by Title | Search by ID | Notes                   |
| -------- | --------------- | ------------ | ----------------------- |
| arXiv    | ✅               | ✅ (arXiv ID) | Best for preprints      |
| DBLP     | ✅               | ❌            | Best for CS conferences |
| CrossRef | ✅               | ✅ (DOI)      | Best for journals       |

## Development

### Running Tests

```bash
uv run pytest tests/ -v
```

### Project Structure

```
bib-enrich-mcp/
├── src/bib_enrich_mcp/
│   ├── __init__.py
│   ├── bib_parser.py    # BibTeX parsing/writing
│   ├── scrapers.py      # Metadata scrapers
│   └── server.py        # MCP server
├── tests/
│   ├── test_bib_parser.py
│   ├── test_scrapers.py
│   └── test_server.py
├── pyproject.toml
└── README.md
```

## License

MIT

TDQS

B3.2/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: one enriches a single bibliography entry by accepting specific identifiers, while the other enriches all entries in a BibTeX file. No overlap in functionality.

Naming Consistency5/5

Both tools follow a consistent naming pattern with the prefix 'mcp_enrich_bib_' followed by a specific suffix ('entry' and 'file'). The naming is uniform and predictable.

Tool Count3/5

The server has only 2 tools, which is on the low end. For a focused enrichment task, this may be acceptable, but it feels slightly under-scoped compared to typical MCP servers that often offer 3-15 tools.

Completeness3/5

The server covers the core enrichment functionality but lacks additional tools for operations like searching for entries, validating BibTeX, or undoing enrichments. The surface is minimal and may leave agents with dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues