Skip to main content
Glama
404Simon

Zotero MCP

by 404Simon

Zotero MCP

読み取り専用のMCPサーバーで、ローカルのZoteroライブラリを操作します。コレクションの閲覧、論文メタデータの確認、PDFからの全文抽出を、すべてFastMCPツールで行います。

要件

  • ~/Zotero/zotero.sqlite に同期されたZoteroデスクトップ(Linuxのデフォルト)

  • Python 3.13+

  • uv

Related MCP server: zotero-mcp

設定

これはMCPサーバーです。コーディングエージェントのMCP設定に登録すると、エージェントがそのツールを使用できるようになります。

ほとんどのエージェントは同様の設定を受け付けます。たとえばOpencodeでは、opencode.json に追加します:

{
  "mcp": {
    "zotero-mcp": {
      "command": [
        "uvx",
        "--from",
        "git+https://github.com/404Simon/zotero-mcp",
        "zotero-mcp"
      ],
      "enabled": true,
      "type": "local"
    }
  }
}

この設定後、エージェントはツールを自動的に発見するため、次のように質問するだけで済みます:

「私のライブラリにあるRAG関連の論文はどれですか?また、最新の論文のアブストラクトは何ですか?」

ツール

list_library

すべてのコレクションと論文を、整形されたツリーとして一覧表示します。オプションでコレクション名、論文タイトル、または著者でフィルタリングできます。

引数

説明

query

string(オプション)

コレクション名、論文タイトル、または著者でフィルタリング(大文字小文字を区別しない)

各論文の行には、アイテムキーが [KEY] の角括弧で含まれます。そのキーを paper_details または paper_text で使用します。フィルタリングされた出力には、一致するコレクションとその祖先を含む、一致するサブツリーのみが表示されます。

├── AI (2 papers)
│     [N3G6XKB9] [preprint] Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (2021) - Patrick Lewis
│     [PPJJCMXJ] [book] Grundkurs Künstliche Intelligenz: eine praxisorientierte Einführung (2021) - Wolfgang Ertel
├── Bachelorarbeit (42 papers)
│   ├── GraalVM (4 papers)
│   │     [DSUERN67] [book] Supercharge your applications with GraalVM ... (2021) - A. B. Vijay Kumar
│   └── Java Performance (1 papers)
│         [Q3ANMGC3] [conferencePaper] Applying Optimizations for Dynamically-typed Languages to Java (2017) - Matthias Grimmer
│   [MTSF327R] [book] Pro Spring Boot 3: An Authoritative Guide with Best Practices (2024) - Felipe Gutierrez
├── Studienarbeit (49 papers)
│     [T3ZCDWC7] [preprint] MMLU-Pro: A More Robust and Challenging Multi-Task Language Understanding Benchmark (2024) - Yubo Wang
├── T3000 (4 papers)
│     [DTZF77Y4] [webpage] Conventional Commits (n.d.) - Unknown
├── TheGreenEpoch (8 papers)
│     [YINRQ63P] [preprint] Distributed LLM Pretraining During Renewable Curtailment Windows (2026) - Philipp Wiesner
└── VesSkel (19 papers)
      [ZUXQUGHW] [journalArticle] Open-source analysis and visualization of segmented vasculature datasets with VesselVio (2022) - Jacob R. Bumgarner

paper_details

アイテムキーで論文の完全なメタデータを取得します。キーは list_library の出力([KEY] として表示)または search_papers の結果から取得します。

引数

説明

item_key

string(必須)

Zoteroアイテムキー(list_library の出力または search_papers の結果に [KEY] として表示)

タイトル、タイプ、キー、追加日/更新日、著者、すべてのフィールドメタデータ、コレクションの所属、PDF添付情報を返します:

Title: MMLU-Pro: A More Robust and Challenging Multi-Task Language Understanding Benchmark
Type: preprint
Key: T3ZCDWC7
Authors: Yubo Wang, Xueguang Ma, Ge Zhang, Yuansheng Ni, ...
date: 2024-11-06
DOI: 10.48550/arXiv.2406.01574
url: http://arxiv.org/abs/2406.01574
abstractNote: In the age of large-scale language models, benchmarks like the Massive Multitask Language Understanding (MMLU) ...
Collections: Studienarbeit
PDF: Wang et al. - 2024 - MMLU-Pro A More Robust and Challenging Multi-Task Language Understanding Benchmark.pdf

search_papers

タイトルまたは著者で全論文を検索します。アイテムキー付きの構造化された結果を返します。

引数

説明

query

string(必須)

検索語(大文字小文字を区別せず、タイトルと著者に一致)

[{"key": "ZUXQUGHW",
  "title": "Open-source analysis and visualization of segmented vasculature datasets with VesselVio",
  "type": "journalArticle", "year": "2022",
  "first_author": "Jacob R. Bumgarner",
  "authors": ["Jacob R. Bumgarner", "Randy J. Nelson"],
  "url": "https://linkinghub.elsevier.com/retrieve/pii/S2667237522000443"},
 {"key": "6DU4XPQQ",
  "title": "Robust Vessel Segmentation in Fundus Images",
  "type": "journalArticle", "year": "2013",
  "first_author": "A. Budai",
  "authors": ["A. Budai", "R. Bock", "A. Maier", "J. Hornegger", "G. Michelson"],
  "url": "http://www.hindawi.com/journals/ijbi/2013/154860/"}]

paper_text

PyMuPDF を使用して論文PDFの全文を抽出します(Pythonの依存関係としてバンドルされており、システムツールは不要です)。~/Zotero/storage/ に保存されたPDF添付ファイルが必要です。

引数

説明

item_key

string(必須)

Zoteroアイテムキー(list_library の出力または search_papers の結果に [KEY] として表示)

タイトル、著者、アブストラクトから始まる、抽出された生のテキストを返します:

            MMLU-Pro: A More Robust and Challenging
              Multi-Task Language Understanding Benchmark
                           1Yubo Wang∗, 1Xueguang Ma∗, 1Ge Zhang, 1Yuansheng Ni, 1Abhranil Chandra, ...
                                 1University of Waterloo, 2University of Toronto, 3Carnegie Mellon University
                                            Abstract
                                In the age of large-scale language models, benchmarks like the Massive Multitask
                                Language Understanding (MMLU) have been pivotal in pushing the boundaries
                                of what AI can achieve in language comprehension and reasoning across diverse
                             domains. ...

ファイル構造

src/
  main.py    # FastMCP server, tool definitions
  zotero.py  # SQLite queries, data models, formatting

データベースは ~/Zotero/zotero.sqlite から直接読み取られます。PDFは ~/Zotero/storage/ から解決されます。APIキーは不要です。

Available Tools

4 tools
list_libraryA

List collections and papers in the Zotero library. Optionally filter by collection name, paper title, or author. Each paper line includes its item key in [KEY] brackets — use that key in paper_details or paper_text.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries full burden. It discloses that each paper line includes its item key in [KEY] brackets and that this key is used in other tools — a useful behavioral detail. However, it does not mention pagination, sorting, exact output scope, or whether the list includes collections only as names.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the primary action, and the second sentence provides crucially useful downstream context about item keys. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema (not shown) and a small sibling set, the description is largely complete: it covers the main list functionality, optional filters, and the connection to paper_details/paper_text via the item key. It lacks a few edge details like default sort order, but is sufficient for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only defines a nullable string 'query' with 0% coverage, so the description must compensate. It explains that the parameter filters by collection name, paper title, or author, but is vague about the exact format — whether it's a single free-text search or separate fields. It adds some meaning but not enough for precise invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('List') and resource ('collections and papers in the Zotero library'), and it distinguishes itself from siblings: paper_details and paper_text focus on individual items, while search_papers implies searching rather than listing all.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It says the list can be optionally filtered by collection name, paper title, or author, which indicates a browsing/listing use case. It also points to paper_details and paper_text for downstream access, but does not explicitly state when not to use this tool versus search_papers.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

paper_detailsA

Get full metadata for a paper by its item key. Obtain the item_key from list_library output (shown as [KEY] before each paper) or from search_papers results.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of disclosing behavior. It communicates that the operation is a read ('Get') and focuses on metadata, which is the primary behavior. However, it does not disclose potential error conditions, permission requirements, or any side effects, leaving some room for ambiguity in edge cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two clear sentences. The first sentence immediately states the tool's purpose, and the second provides necessary usage guidance. There is no redundant information or filler, making it exceptionally concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has only one parameter and an output schema exists, the description covers all necessary context: the purpose, the source of the key, and the fact that the output is full metadata. The output schema handles return value specifics, so the description is complete for this low-complexity tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must add meaning to the parameter. It does this effectively by explaining what item_key is ('shown as [KEY]') and exactly where to get it from (list_library or search_papers). This is far more informative than the schema's bare 'string' type, fully compensating for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with 'Get full metadata for a paper', clearly specifying the action (get) and the resource (paper metadata). It distinguishes itself from siblings like list_library and paper_text by focusing on metadata retrieval. It also mentions how to obtain the required item_key, reinforcing the tool's specific role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states where the item_key comes from ('Obtain the item_key from list_library output... or from search_papers results'), which gives clear context for when to use this tool. It doesn't explicitly exclude alternatives, but the reference to source tools implies a workflow. No alternatives are named directly, so it's not a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

paper_textA

Extract full text from a paper's PDF using pdftotext. Obtain the item_key from list_library output (shown as [KEY] before each paper) or from search_papers results.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations provided, so the description carries the full burden. It does not disclose side effects, performance implications, error handling, or explicitly confirm it is read-only. Mentioning 'using pdftotext' is an implementation detail, not behavioral transparency. The extract action implies reading, but the description lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence states the action, and the second provides essential input sourcing. It is well-structured and front-loaded with the primary purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, output schema present), the description covers purpose and parameter sourcing adequately. It does not mention limitations like scanned PDFs or potential errors, but the presence of an output schema likely handles return values. Slight gap in edge-case behaviors.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With a single parameter and 0% schema description coverage, the description fully compensates by explaining item_key as a paper identifier and providing specific instructions on where to find it (list_library output prefixed with [KEY], or search_papers results). This adds meaning beyond the bare string type in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool extracts full text from a paper's PDF, using the specific verb 'Extract' and identifying the resource. This distinguishes it from siblings like list_library (listing papers), paper_details (metadata), and search_papers (searching), as it's the only one that retrieves full text content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by instructing how to obtain the required item_key from list_library or search_papers results. This implies the tool is used when full text is needed and even mentions prerequisite tools, though it does not explicitly contrast with alternatives or provide exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_papersA

Search papers by title or author and return structured results with item keys. Each result includes key, title, type, year, first_author, authors, and url. Use the key in paper_details or paper_text to get full metadata or PDF text.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of transparency. It discloses the result structure and the need for keys, but it does not mention matching behavior (exact vs. fuzzy), pagination, result limits, or error conditions, leaving gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the action, uses three concise sentences, and includes no redundant details—every sentence serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema covers return values, the description sufficiently covers purpose, result fields, and downstream tool usage. A brief mention of how it differs from list_library would make it more complete, but it is adequate as-is.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides zero coverage for the single 'query' parameter, but the description clarifies that it is a title/author search term, adding semantic meaning beyond the bare schema definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Search papers by title or author') and the specific resource, and differentiates from siblings by mentioning the returned fields and how to use the key with paper_details or paper_text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context for when to use the tool (searching by title/author) and explains the follow-up usage of keys with related tools, though it does not explicitly mention when not to use it or contrast with list_library.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.1/5.0
Disambiguation4/5

The tools are mostly distinct: list_library for browsing, search_papers for targeted search, paper_details for metadata, and paper_text for PDF content. However, list_library and search_papers both filter by title/author, which could cause some confusion.

Naming Consistency3/5

The naming mixes verb_noun patterns (list_library, search_papers) with noun_noun patterns (paper_details, paper_text). While the paper_* prefix helps, the overall convention is not fully consistent.

Tool Count5/5

With only 4 tools, the server is well-scoped for its purpose of accessing a Zotero library. Each tool is essential and there is no unnecessary bloat.

Completeness4/5

The tool set covers the core read workflow: discovering papers (list/search), retrieving full metadata, and extracting PDF text. Missing write operations and a dedicated collection endpoint are minor gaps that agents can work around.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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/404Simon/zotero-mcp'

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