BibTeX Reference Manager MCP
Provides automated tools to manage and fix academic bibliographies, specifically designed to lint, format, and maintain BibTeX files used in LaTeX documents.
Handles and cleans reference lists (BibTeX, RIS) exported from Mendeley, automating the process of linting, deduplication, and format conversion for use in academic writing.
Handles and cleans reference lists (BibTeX, RIS) exported from Zotero, automating the process of linting, deduplication, and format conversion for use in academic writing.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@BibTeX Reference Manager MCPLint my references.bib and tell me what's broken in each entry."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
BibTeX Reference Manager MCP
BibTeX Reference Manager MCP is a free, open source MCP server, published on npm as bibtex-reference-manager-mcp. It cleans, converts, dedupes and formats BibTeX, RIS and CSL JSON reference lists, so you stop fixing broken .bib files by hand. Paste a list into your AI app and ask it to read the entries, convert them to another format, find the duplicates, flag the problems or give every entry a tidy cite key.
It is made with students in mind. Writing a thesis in LaTeX? Ask it to fix a broken .bib file, clean up a Zotero export or a Mendeley export, turn an EndNote RIS file into BibTeX, and tidy your thesis bibliography before you hand it in.
Use it with Claude Desktop, Claude Code, Cursor, VS Code Copilot and any other app that supports MCP. It runs on your computer, needs no internet and no login, and your references never leave your machine.
Free forever. No account and no subscription.
Install
Run it straight from npm with npx. You need Node.js 20 or newer, see Node version for the details. There is nothing else to install, no account, no API key and no config file for the server itself.
npx -y bibtex-reference-manager-mcpRelated MCP server: zotero-native-mcp
Try these prompts
Paste your reference list into the chat first, or attach the file, then ask:
"Here is my references.bib. Lint it and tell me what is broken, entry by entry."
"Find the duplicates in this list and give me back a clean BibTeX file without them."
"Convert these RIS entries from my library export to BibTeX, then rename the keys so they look like smith2024deep."
Add it to your AI app's MCP config so the app can start it for you:
All of them start the same server the same way. The only difference is where the config goes.
Claude Desktop
Add this to claude_desktop_config.json:
{
"mcpServers": {
"bibtex": {
"command": "npx",
"args": ["-y", "bibtex-reference-manager-mcp"]
}
}
}Restart Claude Desktop after you save the file.
Claude Code
Run this in a terminal:
claude mcp add bibtex -- npx -y bibtex-reference-manager-mcpCursor
Cursor reads .cursor/mcp.json from the project folder, or ~/.cursor/mcp.json in your home folder if you want the server in every project.
{
"mcpServers": {
"bibtex": {
"type": "stdio",
"command": "npx",
"args": ["-y", "bibtex-reference-manager-mcp"]
}
}
}VS Code Copilot
Add this to .vscode/mcp.json in your workspace:
{
"servers": {
"bibtex": {
"type": "stdio",
"command": "npx",
"args": ["-y", "bibtex-reference-manager-mcp"]
}
}
}Why this server
Some MCP servers connect to a reference manager account and read your library online. This one does not. It works on text you paste in, so it is a different tool for a different job.
It needs no account, no API key and no internet. Nothing is sent anywhere.
It does not connect to Zotero or Mendeley. You export a file and paste it in, so it works with any reference manager that can write BibTeX, RIS or CSL JSON.
The work is done by code, not by the AI guessing. Converting, deduping, linting and renaming keys give the same result every time.
It is read only. It never edits your library or your files. You get the result back and decide what to keep.
If you want an assistant to search or change a live online library, you need a server that connects to that service. This one is for cleaning up an exported list.
Competitor comparison
Other MCP servers work with reference libraries too. Most connect to an online account or a web API, so your data leaves your computer and you need an account or an API key. This server works on text you paste in, so it needs no account, no API key and no internet, and nothing is sent anywhere.
Server | Works offline | Needs account or key | Reads a live library | Read only | Formats |
BibTeX Reference Manager MCP | Yes | No | No | Yes | BibTeX, RIS, CSL JSON |
zotero-mcp | No | Yes | Yes | No | Zotero, BibTeX |
mendeley-mcp | No | Yes | Yes | No | Mendeley, BibTeX |
bibtex-mcp | No | Optional | No | Yes | BibTeX |
reference-mcp | No | No | No | Yes | BibTeX |
CrossRef-MCP | No | No | No | Yes | BibTeX |
mcp_doi2bib | No | No | No | Yes | BibTeX |
Local-Zotero-MCP | No | No | Yes | Yes | Zotero |
jabref-mcp | No | No | Yes | No | BibTeX |
zotero-mcp and mendeley-mcp connect to your online Zotero or Mendeley library and can change it. bibtex-mcp, reference-mcp, CrossRef-MCP and mcp_doi2bib fetch citations from web sources such as Semantic Scholar, OpenAlex, CiteAs, Google Scholar and CrossRef. Local-Zotero-MCP reads your local Zotero library through the Zotero desktop app. jabref-mcp reads a JabRef .bib file and can add entries through JabRef.
Pick this server when you want to clean, convert, dedupe, lint and rename an exported list without sending it anywhere. Pick one of the others when you want to search or change a live online library.
Export from Zotero or Mendeley
In Zotero, right click a collection (or select some items), choose the export option and pick BibTeX or RIS. In Mendeley, select your references, choose Export and pick BibTeX or RIS. Menu names change between versions, so look for Export.
Open the saved
.bibor.risfile in any text editor and copy everything, or attach the file in an app that accepts attachments.Paste it into your AI app and ask, for example: "Lint this list, remove the duplicates and give me back clean BibTeX with tidy cite keys."
Copy the result into your
.bibfile. To get it back into your reference manager, save it as a.bibor.risfile and import it.
The format is detected for you. If a file is not recognized, say which format it is.
Tools
Tool | What it does |
| Reads BibTeX, RIS or CSL JSON text and returns normalized entries: lower case field names, tidy spacing, bare DOIs, the year filled in from a date, and authors split into "Family, Given". |
| Converts between BibTeX, RIS, CSL JSON and plain text. The input format is detected unless you pass |
| Finds duplicates by DOI, by the same cite key and by similar titles (the years must not clash). Says which entry to keep and returns a BibTeX list without the extra copies. |
| Flags missing required fields, bad page ranges, uncapitalized titles, invalid DOIs, odd years and repeated keys. |
| Makes keys from the first author, the year and the first useful title word, like |
Every tool takes the reference list as text, and every tool returns both a readable answer and structured fields. All of them are read only. They never change a file, because you paste the text in and get the result back.
Formats
BibTeX:
@stringmacros, quoted and braced values,#joins, and@commentblocks are handled.RIS: the usual tags such as
TY,AU,TI,T2,PY,SP,EP,DOandKW.CSL JSON: a list of items, one item, or an object with an
itemslist.
Common workflows
These show how the five tools fit together. All of them take the reference list as text and are read only.
Clean a Zotero or Mendeley export
Run
parse_bibliographyto normalize the entries and fill in missing years.Run
dedupe_entriesto remove duplicates by DOI, cite key or title.Run
lint_entriesto see missing fields, bad page ranges and odd years.Run
generate_cite_keysto give every entry a tidy key likesmith2024deep.Run
convert_bibliographyto get back a clean BibTeX file.
Turn an EndNote RIS export into BibTeX
Run
parse_bibliographyon the RIS text to check it parses.Run
convert_bibliographywithtoset to BibTeX.Run
generate_cite_keysif you want keys likesmith2024deep.
Check a finished .bib before you hand it in
Run
parse_bibliographyto normalize.Run
lint_entriesand fix what it flags.Run
dedupe_entriesto make sure nothing is listed twice.
Privacy
Everything runs on your computer. The server reads only the text your AI app passes to it. It makes no network requests, does not look up DOIs online, needs no API key and keeps nothing between calls. DOI checks only look at the shape of the DOI, they do not ask a website whether it exists.
FAQ
Does it check that a DOI really exists? No. It runs offline, so it only checks that the DOI has the right shape, like 10.1000/xyz123.
How does it decide two titles are the same? It lowercases the titles, drops punctuation and accents, and compares pairs of letters. The default match is 0.9 out of 1. Pass title_threshold to loosen or tighten that. Two entries with different years are not matched by title.
Will it change my protected capitals like {DNA}? No. Braces are kept in BibTeX output and only removed when you convert to RIS, CSL JSON or plain text.
Node version
You need Node.js 20 or newer to run the server. To work on it, use Node.js 22.12 or newer.
Development
npm install
npm run build
npm testThe code is in src. src/bib.ts reads and writes the formats, src/analyze.ts finds duplicates and lint problems, and src/tools.ts defines the five tools.
License
MIT, see LICENSE.
Available Tools
5 toolsconvert_bibliographyConvert a bibliographyARead-only
Convert a reference list between BibTeX, RIS, CSL JSON and plain text (a simple author, year, title style). The input format is detected unless you pass it. Page ranges, DOIs and names are cleaned on the way. Example: text is a BibTeX entry and to is "ris", and output is the same reference as RIS. Set from only to override detection.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | The format to write. | |
| from | No | The format of the text. Defaults to auto, which looks at the text to decide. | |
| text | Yes | The reference list as text: BibTeX, RIS or CSL JSON. |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | Yes | The format that was written. |
| from | Yes | The format that was read. |
| count | Yes | How many entries were converted. |
| output | Yes | The converted reference list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered; the description adds real behavioral value by disclosing that page ranges, DOIs and names are normalized during conversion and that source format is auto-detected. It does not state failure behavior on malformed input, leaving a modest gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact and front-loaded, with formats named first and the detection caveat last. The example sentence is somewhat awkwardly phrased and restates the obvious mapping, but it does illustrate the required parameters, so it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present the description needn't explain return values, and parameters are fully documented in the schema; the added normalization note covers the main hidden behavior. Only the plain-text-as-input ambiguity and error handling are unaddressed, which is minor for a stateless read-only converter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both enums are self-documenting, so the baseline is 3; the description earns the extra point by clarifying that 'from' defaults to detection and that specifying it suppresses auto-detection. Note it describes plain text as a conversion target but the 'from' enum omits it, leaving input-side text handling slightly ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (convert) and resource (a reference list) plus the exact formats supported, which lets an agent distinguish it from parse_bibliography, dedupe_entries, lint_entries and generate_cite_keys without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the default behavior (input format is auto-detected) and the one override case ('Set from only to override detection'), giving clear context for invocation. It stops short of explicitly routing the agent away from sibling tools such as parse_bibliography, so a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dedupe_entriesFind duplicate entriesARead-only
Find duplicate references by matching DOI, by the same cite key, and by similar titles (the years must not clash). Each group says which entry to keep, the one with the most fields, and which to remove. Also returns the list as BibTeX with the extra copies dropped. Example: two entries with the same DOI, one with 3 fields and one with 6, give one group that keeps the entry with 6 fields and lists the other under remove. Your files are not changed.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The reference list as text: BibTeX, RIS or CSL JSON. | |
| format | No | The format of the text. Defaults to auto, which looks at the text to decide. | |
| title_threshold | No | How alike two titles must be to count as the same, from 0.5 to 1. Defaults to 0.9. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | How many entries were read. |
| groups | Yes | |
| unique | Yes | How many entries are left once the duplicates are dropped. |
| deduplicated_bibtex | Yes | The list as BibTeX without the removed copies. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, and the description reinforces that with 'Your files are not changed.' It goes further by disclosing the output shape – groups with a keep/remove decision and a deduplicated BibTeX list – plus the keep-the-entry-with-most-fields tie-break rule, which is useful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The matching rules and non-mutation guarantee are front-loaded, and the worked example clarifies the tie-break rule. The example restates what the preceding sentences already say, so it is slightly redundant, but overall the text is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained, and the description still summarizes the group structure and BibTeX output. It covers matching rules, tie-breaking, and non-mutation; only minor gaps remain, such as how format auto-detection behaves or when to adjust the title threshold.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents text, format, and title_threshold. The description alludes to title similarity matching but adds no syntax, threshold guidance, or format-detection detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Find duplicate references') and enumerates the exact matching rules: DOI, shared cite key, and similar titles with non-clashing years. This is clearly distinguishable from siblings like lint_entries or parse_bibliography, which do not report duplicate groups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context of use is implied by the matching criteria, so an agent can infer this is the tool for spotting duplicate entries. However, it never states when to prefer it over lint_entries or parse_bibliography, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_cite_keysGenerate cite keysARead-only
Create consistent cite keys from the first author's family name, the year and the first meaningful word of the title, like smith2024deep. Repeated keys get a letter added. Returns the old and new key for each entry and the list as BibTeX with the new keys. Example: an entry with key old1, author "Smith, John", year 2024 and title "Deep Learning for Graphs" gives old_key old1 and new_key smith2024deep, or smith2024 when include_title_word is false.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The reference list as text: BibTeX, RIS or CSL JSON. | |
| format | No | The format of the text. Defaults to auto, which looks at the text to decide. | |
| include_title_word | No | Add the first meaningful title word, so you get smith2024deep and not smith2024. Defaults to true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| keys | Yes | |
| count | Yes | |
| bibtex | Yes | The list as BibTeX using the new keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the description need only add context — and it does: repeated keys get a letter suffix, and the response contains the old/new key pair per entry plus a full BibTeX list. It doesn't mention any rate limits or failure modes for unparseable input, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the rule, then collision handling, then return contents — a sensible order. The trailing example restates the smith2024deep pattern already given and is longer than strictly necessary, so it loses a point for redundancy rather than length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be spelled out, yet the description covers the old/new key mapping and BibTeX output anyway. The only gap is guidance on which input formats are accepted beyond the schema's enum and what happens with malformed text, but for a 3-param read-only tool this is close to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description goes beyond the schema by demonstrating include_title_word's effect concretely (smith2024deep vs smith2024) and by implying format detection behavior, though it never discusses the format parameter's auto/bibtex/ris/csl_json choices.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (create cite keys) plus the exact derivation rule (first author's family name, year, first meaningful title word) and the collision behavior. Nothing about parse_bibliography, convert_bibliography, dedupe_entries or lint_entries overlaps with this key-generation transformation, so the agent can distinguish it immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear what the tool produces but never says when to choose it over siblings such as convert_bibliography or dedupe_entries, nor does it state prerequisites (e.g. the text must already be parsed/unambiguous). Usage is only implied by the nature of the operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lint_entriesLint entriesARead-only
Check a reference list for problems: missing required fields for the entry type, bad page ranges, titles that are not capitalized, invalid DOIs, odd years and repeated keys. Each issue names the entry key, the field and a plain message. Example: an @article with no journal field gives an issue with the rule missing-field and the field journal. Pass the whole list as text so repeated keys can be found.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The reference list as text: BibTeX, RIS or CSL JSON. | |
| format | No | The format of the text. Defaults to auto, which looks at the text to decide. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | How many entries were checked. |
| errors | Yes | |
| issues | Yes | |
| warnings | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=false, and the description adds substantial behavioral detail beyond that: it names the issue categories, explains that each issue reports the entry key, field, and message, and gives a concrete missing-field example. This tells the agent both what is checked and the shape of the findings.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose, followed by output semantics and a compact example. Every sentence contributes useful information and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only linting tool with two well-documented parameters and an output schema, the description supplies everything needed: the scope of checks, the issue-reporting shape, and the key usage constraint about passing the full list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning by explaining why the entire list should be passed as text: repeated-key detection requires the full document. The format parameter is not discussed, but its schema description and enum already make its behavior clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (check/lint) and resource (reference list) and enumerates the exact problem classes it detects. An agent can distinguish it from parse_bibliography, convert_bibliography, dedupe_entries, and generate_cite_keys because those do not diagnose field, page, capitalization, DOI, year, or key issues.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear that this is the diagnostic tool for a reference list and adds the practical instruction to pass the whole list as text so repeated keys can be found. It does not explicitly name when to choose it over each sibling, but the intended context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_bibliographyParse a bibliographyARead-only
Read BibTeX, RIS or CSL JSON text and return the entries in one normalized shape: lower case field names, tidy whitespace, bare DOIs, the year filled in from a date, and authors split into "Family, Given". Nothing is sent anywhere. Example: text "@article{k1, AUTHOR = {John Smith and Jane Doe}, title={Deep Learning for Graphs}, year={2024}}" returns one entry with authors ["Smith, John", "Doe, Jane"] and lower case field names. Leave format out unless auto picks the wrong one.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The reference list as text: BibTeX, RIS or CSL JSON. | |
| format | No | The format of the text. Defaults to auto, which looks at the text to decide. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | How many entries were found. |
| format | Yes | The format that was read: bibtex, ris or csl_json. |
| entries | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the readOnly/openWorld annotations by disclosing that processing is local ('Nothing is sent anywhere') and by spelling out the exact normalization transformations applied to fields, DOIs, years, and author names. It doesn't say how malformed or unparseable input is handled, which is the remaining behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence front-loads the core purpose and normalization behavior; the example earns its space by showing input and expected authors/field casing. It's slightly dense but contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, full parameter coverage, and annotations covering safety, the description supplies the remaining needed context: accepted formats, normalization contract, and a concrete example. Minor gaps remain around error behavior for invalid or mixed-format input.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented, making 3 the baseline. The description adds practical meaning by advising to omit format unless auto-detection fails, and the worked example shows what the text parameter looks like in practice.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: read BibTeX/RIS/CSL JSON text and return entries in one normalized shape. The normalization rules (lower case fields, bare DOIs, year from date, authors split) make the operation concrete. It doesn't explicitly distinguish itself from sibling convert_bibliography, which is the nearest overlap, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear guidance for the one ambiguous parameter: 'Leave format out unless auto picks the wrong one,' which tells the agent to rely on auto-detection first. Usage context is clear from the opening sentence, but there is no explicit statement about when to use this versus convert_bibliography or the other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
convert_bibliography - First observed
dedupe_entries - First observed
generate_cite_keys - First observed
lint_entries - First observed
parse_bibliography
TDQS
Scored across 5 tools
Parse and convert both accept bibliography text and perform normalization/cleaning, so they could be confused at a glance. However, parse_bibliography is for normalization into one shape, while convert_bibliography is for format conversion, and dedupe/lint/generate_cite_keys are clearly distinct. Descriptions provide enough guidance to select correctly.
All tool names follow a consistent snake_case verb_noun pattern: parse_bibliography, convert_bibliography, dedupe_entries, lint_entries, generate_cite_keys. There are no mixed conventions or vague names.
Five tools is well-scoped for a BibTeX reference manager utility set. Each tool earns its place by covering a distinct operation, with no obvious redundancy.
The set covers parsing, format conversion, duplicate detection, linting, and cite-key generation, which are core reference-list workflows. It lacks search/filter, merge, sorting, or write-back operations, but those are minor gaps that agents can work around given the text-processing focus.
Maintenance
Related MCP Connectors
Remote MCP: JSON repair, JSON Schema validation, JSON to TypeScript, CSV to JSON and JSON to CSV.
Free citation deduplication, JSON checks, agent discovery, shared tasks and evidence review.
Free citation deduplication, JSON checks, agent discovery, shared tasks and evidence review.
Convert files, URLs, and documents to clean, AI-ready Markdown via MCP.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables academic integrity auditing, manuscript preparation, literature search, journal formatting, and submission packaging through local MCP tools.-
- AlicenseAqualityAmaintenanceMCP server for Zotero 10+. Read and write your library entirely offline through Zotero's native local API. No plugin, no API key, no cloud.28107 npm10MIT
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to audit and fix EPUB, Office, OpenDocument, SVG, and WACZ files entirely offline via the Lens-suite CLI tools, returning stable JSON results.MIT
- AlicenseBqualityCmaintenanceEnables locally-first literature research through an MCP host by collecting sources, parsing documents, retrieving evidence, validating citations, and exporting research records in multiple formats.38MIT