Uniwersalny serwer MCP dla protokołu OAI-PMH — odpytuj dowolne repozytorium (dLibra, DSpace, EPrints, PMC…) przez Model Context Protocol
Project description
oai-pmh-mcp
Nic nie trzeba konfigurować — adres repozytorium podaje się przy wywołaniu narzędzia, więc jedna instalacja obsługuje dowolną liczbę repozytoriów. Ten pakiet nie jest jeszcze na PyPI, dlatego linki do Cursora i VS Code instalują go prosto z gita (
uvx --from git+https://…).
Uniwersalny serwer MCP dla protokołu OAI-PMH (Open Archives Initiative – Protocol for Metadata Harvesting).
Pozwala dowolnemu klientowi MCP (Claude, ChatGPT, Cursor…) odpytywać dowolne
publiczne repozytorium OAI-PMH — biblioteki cyfrowe oparte o dLibrę (np.
Wielkopolska Biblioteka Cyfrowa), a także DSpace,
EPrints, PubMed Central i inne — bez konfiguracji per-host. Adres repozytorium
(base_url) podaje się w każdym wywołaniu.
Możliwości
Wierny wrapper sześciu czasowników OAI-PMH + wygodna nakładka do masowego pobierania:
| Narzędzie | Rola |
|---|---|
identify |
tożsamość repozytorium (nazwa, wersja protokołu, granularność, polityka usuniętych) |
list_metadata_formats |
dostępne formaty metadanych (oai_dc, mods, marc…) |
list_sets |
kolekcje / zestawy |
list_identifiers |
same nagłówki rekordów (tani przegląd) |
list_records |
strona pełnych rekordów + token paginacji |
get_record |
pojedynczy rekord po identyfikatorze |
harvest_records |
auto-paginacja: pobiera wiele stron do limitu, z możliwością wznowienia |
Wyjście w trzech formatach (format): text (domyślny, oszczędny tokenowo),
json (maszynowy), xml (surowy oryginał).
Instalacja
uvx oai-pmh-mcp # uruchomienie bez instalacji (stdio)
# lub
uv tool install oai-pmh-mcp
Konfiguracja klienta MCP
Claude Code
claude mcp add oai-pmh -- uvx oai-pmh-mcp
mcp.json (Cursor / inne)
{
"mcpServers": {
"oai-pmh": { "command": "uvx", "args": ["oai-pmh-mcp"] }
}
}
Transport
Domyślnie stdio. Tryb zdalny streamable-HTTP:
oai-pmh-mcp --transport http --host 0.0.0.0 --port 8000
Przykład
„Sprawdź, jakie kolekcje ma
https://www.wbc.poznan.pl/dlibra/oai-pmh-repository.xmli pokaż 5 najnowszych rekordów."
Model wywoła identify → list_sets → list_records i złoży odpowiedź.
Rozwój
uv sync
uv run pytest # testy jednostkowe (offline, fixture'y)
uv run pytest -m integration # testy sieciowe (opcjonalne)
uv run ruff check .
Zakres
OAI-PMH to protokół metadanych — serwer nie pobiera treści obiektów (skanów, PDF-ów). To read-only, bez autoryzacji, bez cache.
Bezpieczeństwo
- Parsowanie XML jest hartowane — parser nie rozwija encji ani nie sięga do sieci/DTD (ochrona przed XXE i „billion laughs" z niezaufanych repozytoriów).
harvest_recordsma twarde limity (max rekordów, max stron, przerwanie przy braku postępu) — złośliwy serwer nie zapętli klienta.- SSRF z natury narzędzia: serwer pobiera dowolny
base_urlpodany przez klienta (taki jest cel). Dozwolone są tylko schematyhttp/https. Jeśli wdrażasz wariant zdalny (HTTP) w sieci z zasobami wewnętrznymi, uruchom go w środowisku z ograniczeniem sieci wychodzącej — model mógłby wskazać adres wewnętrzny (np. endpoint metadanych chmury).
Licencja
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file oai_pmh_mcp-0.1.0.tar.gz.
File metadata
- Download URL: oai_pmh_mcp-0.1.0.tar.gz
- Upload date:
- Size: 89.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7923e733b047f70df992b2a115aea9b8060796a317838d421c5689f34229d46b
|
|
| MD5 |
bcbd42f8cb87e0175ed813f6afae0a16
|
|
| BLAKE2b-256 |
69d9eb7e3f8cfcb1ffca05095696bc7d1eff789ebc0d811fd98ce4d3436b893d
|
Provenance
The following attestation bundles were made for oai_pmh_mcp-0.1.0.tar.gz:
Publisher:
publish.yml on mpasternak/oai-pmh-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
oai_pmh_mcp-0.1.0.tar.gz -
Subject digest:
7923e733b047f70df992b2a115aea9b8060796a317838d421c5689f34229d46b - Sigstore transparency entry: 2237477316
- Sigstore integration time:
-
Permalink:
mpasternak/oai-pmh-mcp@07d2fc25d9ba404d0dbd03ebc836e683d9ff4292 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/mpasternak
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@07d2fc25d9ba404d0dbd03ebc836e683d9ff4292 -
Trigger Event:
release
-
Statement type:
File details
Details for the file oai_pmh_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: oai_pmh_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 16.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d877f4deed4252f164915e6e77f07dc2b6e8909e2ba661f5227eccd70c4f1dc
|
|
| MD5 |
f2281cdf0c6b07e660806b5df8cbda5a
|
|
| BLAKE2b-256 |
539021c628f88fb0adf175210bebe0019269eb4c75532c9b4a2648f109a3b807
|
Provenance
The following attestation bundles were made for oai_pmh_mcp-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on mpasternak/oai-pmh-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
oai_pmh_mcp-0.1.0-py3-none-any.whl -
Subject digest:
8d877f4deed4252f164915e6e77f07dc2b6e8909e2ba661f5227eccd70c4f1dc - Sigstore transparency entry: 2237477411
- Sigstore integration time:
-
Permalink:
mpasternak/oai-pmh-mcp@07d2fc25d9ba404d0dbd03ebc836e683d9ff4292 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/mpasternak
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@07d2fc25d9ba404d0dbd03ebc836e683d9ff4292 -
Trigger Event:
release
-
Statement type: