Polish Academic MCP
Allows retrieving scientific dataset metadata from the RePOD repository using Digital Object Identifiers (DOI).
Click on "Install 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., "@Polish Academic MCPfind recent research articles about renewable energy in Poland"
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.
Polish Academic MCP
Zdalny serwer MCP działający na Cloudflare Workers, który udostępnia wiele polskich baz danych i serwisów publicznych jako narzędzia wywoływane przez AI.
MCP (Model Context Protocol) to otwarty standard pozwalający modelom językowym (Claude, GPT, Bielik.AI itp.) na wywoływanie zewnętrznych narzędzi i API w ustandaryzowany sposób.
WAŻNE! Serwer zdalny (link do cloudflare) zbiera domyślnie anonimowe dane ewaluacyjne z każdego zapytania narzędzia MCP jako dane do dalszych badań i ewaluacji, czyli jak używasz tego narzędzia to tak jakbyś wypełniał dla mnie ankietę do badań <3 Dzięki za zrozumienie!
Jeśli nie chcesz przekazywać mi danych badawczych wystarczy odpalić serwer lokalnie ;)
Autoreklama: Token JWT i wsparcie dla OAuth
Jeśli interesuje Ciebie większy rate limiting i w tym wsparcie do OAuth co da ci możliwość podpiąć MCP np. pod Perplexity to napisz na artur@sendyka.dev z zapytaniem. Jeśli wykorzystanie będzie znaczne (no tak powyżej 100 requestów na dobę) czy komercyjne to niestety będzie to już odpłatne.
Dostępne bazy danych i narzędzia
Narzędzie | Baza danych | Opis | |
| Wyszukiwanie pełnotekstowe (API JSON portalu — frazy, tytuły, abstrakty) | ||
| Biblioteka Nauki | Listowanie rekordów OAI-PMH ( | |
| Biblioteka Nauki | Pobranie metadanych pojedynczego artykułu po ID (OAI-PMH | |
| OAI-PMH | ||
| RCIN | OAI-PMH | |
| Wyszukiwanie publikacji z Repozytorium Jagiellońskiego | ||
| RUJ | Pobranie metadanych pozycji po UUID | |
| Wyszukiwanie prac i publikacji AGH w Krakowie | ||
| AGH | Pobranie metadanych pozycji po UUID | |
| Wyszukiwanie publikacji Uniwersytetu Adama Mickiewicza | ||
| AMU | Pobranie metadanych pozycji po UUID | |
| Wyszukiwanie publikacji Akademii Nauk Stosowanych w Nowym Sączu | ||
| UAFM | Pobranie metadanych pozycji po UUID | |
| Wyszukiwanie danych badawczych ICM UW | ||
| ICM | Pobranie metadanych pozycji po UUID | |
| Wyszukiwanie zbiorów danych badawczych uczelni krakowskich | ||
| Wyszukiwanie polskich otwartych danych badawczych | ||
| RePOD | Pobranie metadanych zbioru danych po DOI | |
| Wyszukiwanie danych otwartych z portalu rządowego | ||
| dane.gov.pl | Pobranie szczegółów zbioru danych po ID | |
| Zbiory otwarte: uczelnie, pracownicy, projekty, publikacje, kursy (JSON, token strony) | ||
| Wyszukiwanie publikacji (JSON; wymaga | ||
| PBN | Wyszukiwanie osób / ORCID (JSON; te same nagłówki co wyżej) | |
| PBN | Metadane publikacji po id obiektu (JSON) | |
| Wyszukiwanie tematów (subjectów) po fragmencie nazwy (API v1) | ||
| BDL / GUS | Wyszukiwanie zmiennych statystycznych (cech) | |
| BDL / GUS | Wyszukiwanie jednostek terytorialnych (TERYT itd.) | |
| BDL / GUS | Metadane jednej zmiennej po id liczbowym | |
| BDL / GUS | Wartości dla jednej zmiennej po jednostkach (np. województwa) | |
| BDL / GUS | Wartości dla jednej jednostki i wskazanych zmiennych | |
| Aktualne odczyty ze stacji synoptycznych (pogodowych) | ||
| IMGW-PIB | Aktualne odczyty z wodowskazów i stacji hydrologicznych | |
| IMGW-PIB | Aktualne odczyty ze stacji meteorologicznych | |
| IMGW-PIB | Aktywne ostrzeżenia meteorologiczne i hydrologiczne | |
| Wyszukiwarka treści strony www.pkn.pl (Drupal / Solr, HTML) | ||
| Wyszukiwarka norm (Liferay; sesja + POST, HTML) | ||
| WIEDZA | Karta pojedynczej normy po numerze katalogowym (HTML) | |
| Baza Legalnych Źródeł (Legalna Kultura) | WordPress REST | |
| Baza Legalnych Źródeł | Pojedyncze źródło po ID (JSON) | |
| Baza Legalnych Źródeł | Taksonomia | |
| Wyszukiwanie pełnotekstowe (HTML; katalog nieaktualizowany od 2022) | ||
| BazTOL | Przeglądanie po dziedzinie (id z menu) | |
| BazTOL | Szczegóły zasobu po ID (HTML) | |
| Kanał RSS aktualności instytucji (XML) | ||
| NAC | Wyszukiwarka WordPress REST | |
| NAC | Pojedynczy wpis blogowy po id (JSON) | |
| NAC | Pojedyncza strona statyczna po id (JSON) | |
| Katalog Biblioteki ŚUM (Aleph) | X-Services | |
| Katalog ŚUM / Aleph | X-Services | |
| Wyszukiwanie profili naukowców (nazwisko, dziedzina, paginacja) | ||
| Ludzie Nauki | Wyszukiwanie semantyczne / pełnotekstowe po frazie | |
| Ludzie Nauki | ORCID, stopnie/tytuły, słowa kluczowe dla profilu po ID | |
| Wyszukiwanie katalogu dzieł (Collectio / PAU) | ||
| PAUart | Metadane pojedynczego dzieła po ID z katalogu | |
| Wyszukiwanie aktów prawnych (tytuł, słowa kluczowe ISAP, daty, DU/MP itd.) | ||
| ISAP / ELI | Metadane pojedynczego aktu po ELI, np. | |
| Wyszukiwanie słowne ( | ||
| Biblioteka Sejmowa | Karta bibliograficzna ( | |
| Wyszukiwanie orzeczeń (fraza | ||
| SAOS / API przeglądania | Pełne orzeczenie po id liczbowym z wyszukiwarki | |
| SAOS / API pobierania | Lista endpointów hurtowego pobierania (dump) | |
| SAOS — dump | Słownik sądów powszechnich (stronicowanie) | |
| SAOS — dump | Słownik izb SN (stronicowanie) | |
| SAOS — dump | Hurtowe orzeczenia (filtry dat / synchronizacja; duże odpowiedzi) | |
| SAOS — dump | Etykiety modułu wzbogacania (stronicowanie) | |
| Słowniki: autorzy, epoki, gatunki, rodzaje, motywy, kolekcje (slugi) | ||
| Wolne Lektury | Lista utworów po filtrach (autor/epoka/gatunek/rodzaj); nie woła | |
| Wolne Lektury | Metadane i linki do plików po slugu utworu | |
| Wolne Lektury | Kolekcja tematyczna + lista książek w kolekcji | |
| Wyszukiwanie materiałów po słowie kluczowym (JSON API frontu; | ||
| Ninateka | Metadane pojedynczego materiału po id liczbowym z wyszukiwarki (JSON) | |
| Wyszukiwanie plakatów ( | ||
| Gapla | Strona pojedynczego plakatu po id ( | |
| Wyszukiwanie fotosów i zdjęć ( | ||
| Fototeka | Strona pojedynczego zdjęcia po id ( | |
| FilmPolski.pl (PWSFTviT) | Wyszukiwarka bazy filmu ( | |
| FilmPolski.pl | Karta rekordu po id ( | osoba">` (obcięty) |
| Fototeka Śląska (MWO Opole) | Wyszukiwanie zdjęć (WordPress GET | |
| Fototeka Śląska | Strona rekordu | |
| Wyszukiwanie Solr (HTML — kafelki wyników; brak publicznego JSON API) | ||
| Repozytorium FN | Karta rekordu po id węzła Drupal ( | |
| Repozytorium FN | Indeks tytułów po pierwszej literze (A–Ż / INNE — HTML) | |
| Repozytorium FN | Przegląd: fabularne / dokumentalne / animacje / magazyn (HTML) | |
| Pobranie pojedynczej strony statycznej po ścieżce względnej ( | ||
| Dokumenty Śląska | Lista JSON ścieżek do głównej serii dokumentów średniowiecznych (okresy do 1333 r.) — pomoc nawigacyjna | |
| — (lokalnie) | Ewaluacja odpowiedzi modelu względem rekordu źródłowego (RQ2) |
Biblioteka Sejmowa — katalog OPAC
Katalog Biblioteki Sejmowej działa w systemie Aleph (interfejs jak w przeglądarce). Nie udostępnia publicznego API JSON ani dokumentacji SRU dla maszynowego dostępu w stylu REST — narzędzia bs_sejm_search i bs_sejm_get_item wołają te same adresy co formularz WWW (func=find-b — lista wyników, func=item-global — pełna karta rekordu) i zwracają surowe HTML.
Typowy przepływ: bs_sejm_search z parametrem local_base (np. bis01 — katalog główny, bis05 — artykuły z czasopism, pos01 — nagrania z posiedzeń, tek01 — teksty konstytucji) → z HTML listy wyników odczytaj z linków item-global wartości doc_library i doc_number → bs_sejm_get_item. Pełna lista baz jest na stronie startowej katalogu.
Uwaga: to nie jest to samo co api.sejm.gov.pl — akty prawne i metadane ISAP obsługują osobne narzędzia isap_* (ELI API).
Fototeka, FilmPolski, Fototeka Śląska i Dokumenty Śląska
Fototeka (Filmoteka Narodowa — INA) nie publikuje osobnego REST/OpenAPI. Wyniki wyszukiwania są serwowane jako HTML (/pl/strona/wyszukiwarka.html z parametrami key, search_type, pageNumber, howmany). fototeka_get_photo zwraca stronę rekordu (/pl/foto/view/{id}.html). Wewnętrzny endpoint ajax.html (JSON z fragmentami HTML) wymaga pełnego formularza sesji i nie jest używany w narzędziu.
FilmPolski.pl — Internetowa Baza Filmu Polskiego; brak publicznego API JSON. Wyszukiwanie to GET na index.php (szukaj, rodzaj: fragment / początek / dokładnie). Osoby w bazie są jako „nazwisko, imię” (w trybie dokładnie wymagany jest przecinek). Narzędzia parsują HTML do zwartego JSON (filmpolski_search) i zwracają tekst z głównego artykułu rekordu (filmpolski_get_item). Regulamin serwisu ogranicza kopiowanie całej bazy — używaj krótkich fragmentów i podawaj źródło.
Fototeka Śląska (Muzeum Wsi Opolskiego) działa na WordPressie — istnieje ogólne /wp-json/, ale typ wpisów galerii nie ma publicznego endpointu wp/v2/... dla pojedynczych rekordów. Wyszukiwanie jak na stronie głównej: GET z s (fraza), t (tytuł / miejscowość / powiat / opis / nr katalogowy), opcjonalnie y (okres historyczny), paged (strona). fototekaslaska_search bierze tylko blok .search-list, żeby nie mieszać wyników z sekcją „Ostatnio dodane”. fototekaslaska_get_photo pobiera /galeria/{slug}/. Prawa do zdjęć pozostają po stronie muzeum — bez masowego pobierania plików.
Dokumenty Śląska to statyczna witryna (pliki indeks … / dokument … i podkatalogi) — brak API i centralnej wyszukiwarki. dokumenty_slaska_get_page pobiera jeden zasób po bezpiecznej ścieżce względnej; dokumenty_slaska_medieval_catalog to stała lista JSON ścieżek głównej serii średniowiecznej (nawigacja, nie zapytanie full-text).
NAC i katalog ŚUM (Aleph)
Narodowe Archiwum Cyfrowe — strona instytucji na WordPressie: narzędzia nac_* używają kanału RSS (/feed/) oraz WordPress REST API (/wp-json/wp/v2/…). Zdigitalizowane materiały archiwalne są w serwisie Szukaj w Archiwach (informacje NAC) — brak tam publicznego, udokumentowanego API do przeszukiwania katalogu z Workerów; często działa też ochrona przed botami (Incapsula). nac_site_search może zwracać HTTP 403 z niektórych sieci — z edge Cloudflare zachowanie bywa inne.
Katalog Biblioteki Śląskiego Uniwersytetu Medycznego to OPAC Aleph (Ex Libris). Interfejs maszynowy: Aleph X-Services pod https://katalog.sum.edu.pl/X (odpowiedzi XML), zgodnie z dokumentacją Ex Libris. sum_aleph_find woła op=find (np. request=wrd=…); na instalacji może pojawić się komunikat o braku konfiguracji bramki SRU — wtedy wyszukiwanie przez X-Server wymaga naprawy po stronie biblioteki. sum_aleph_present (op=present, format marc itd.) służy do pobrania rekordów z numeru zestawu i pozycji.
Większość baz oferuje otwarty dostęp do odczytu bez obowiązkowych kluczy API. Wyjątki: narzędzia WIEDZA (wiedza_*) nie buforują odpowiedzi w KV (sesja Liferay); PKN www (pkn_search) ma krótszy TTL cache niż repozytoria akademickie. BDL (GUS) działa anonimowo, ale możesz ustawić zmienną środowiskową BDL_CLIENT_ID (nagłówek X-ClientId), jeśli masz klucz z Portalu API GUS — wtedy wyższe limity wywołań po stronie GUS. Dokumentacja REST: https://bdl.stat.gov.pl/api/v1/ (OpenAPI: …/swagger/doc/swagger.json). PBN (pbn_*): dostęp do API produkcyjnego wymaga par PBN_APP_ID / PBN_APP_TOKEN (oraz opcjonalnie PBN_USER_TOKEN) — rejestracja aplikacji instytucji według Centrum pomocy PBN.
Wymagania dla developmentu
Node.js 18 lub nowszy
Konto Cloudflare (darmowe)
Wrangler CLI (instalowany jako zależność deweloperska)
Instalacja i uruchomienie lokalne
# 1. Sklonuj repozytorium
git clone https://github.com/asterixix/polish-academic-mcp.git
cd polish-academic-mcp
# 2. Zainstaluj zależności
npm install
# 3. Uruchom serwer deweloperski
npm run dev
# → Serwer MCP dostępny pod adresem http://localhost:8788/mcpTestowanie z MCP Inspector
npx @modelcontextprotocol/inspector@latest
# Otwórz http://localhost:5173
# W polu "Server URL" wpisz: http://localhost:8788/mcp
# Kliknij "Connect"Wdrożenie na Cloudflare Workers
Krok 1 — Zaloguj się do Cloudflare
npx wrangler loginKrok 2 — Utwórz przestrzenie nazw KV
npx wrangler kv namespace create "CACHE_KV"
# Skopiuj zwrócone "id" i wklej do wrangler.jsonc jako id dla CACHE_KV
npx wrangler kv namespace create "RATE_LIMIT_KV"
# Skopiuj zwrócone "id" i wklej do wrangler.jsonc jako id dla RATE_LIMIT_KVKrok 3 — Zaktualizuj wrangler.jsonc
Otwórz wrangler.jsonc i zastąp wartości placeholder prawdziwymi ID:
"kv_namespaces": [
{
"binding": "CACHE_KV",
"id": "WKLEJ_TUTAJ_ID_CACHE_KV",
"preview_id": "WKLEJ_TUTAJ_ID_CACHE_KV"
},
{
"binding": "RATE_LIMIT_KV",
"id": "WKLEJ_TUTAJ_ID_RATE_LIMIT_KV",
"preview_id": "WKLEJ_TUTAJ_ID_RATE_LIMIT_KV"
}
]Krok 4 — Wdróż
npm run deploy
# → Dostępny pod adresem: https://polish-academic-mcp.<twoje-konto>.workers.dev/mcpPodłączenie klientów MCP
Claude Desktop
Dodaj do pliku konfiguracyjnego Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"polish-academic": {
"command": "npx",
"args": ["mcp-remote", "https://polish-academic-mcp.kolpol25.workers.dev/mcp"]
}
}
}Lokalizacja pliku konfiguracyjnego:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Claude.ai (Connector)
Przejdź do Ustawienia → Connectors → Dodaj własny connector
Wpisz URL serwera:
https://polish-academic-mcp.kolpol25.workers.dev/mcpKliknij Zapisz
Podłączenie z OpenAI / ChatGPT
ChatGPT.com (plan Plus / Pro / Team / Enterprise)
ChatGPT obsługuje zdalne serwery MCP przez protokół Streamable HTTP.
Otwórz ChatGPT.com i zaloguj się
Przejdź do Ustawienia (Settings) → Połączone aplikacje (Connected apps)
Kliknij Dodaj narzędzia (Add tools) → Serwer MCP (MCP server)
Wpisz URL serwera:
https://polish-academic-mcp.kolpol25.workers.dev/mcpNadaj nazwę (np.
Polish Academic) i zapisz
Narzędzia będą dostępne podczas każdej rozmowy.
Uwaga: Funkcja dostępna dla subskrybentów ChatGPT Plus i wyższych planów. Opcja może znajdować się w innym miejscu menu w zależności od wersji interfejsu.
OpenAI Responses API (Python — programistycznie)
Biblioteka openai-agents (Python) obsługuje zdalne serwery MCP natywnie:
pip install openai-agentsimport asyncio
from agents import Agent, Runner
from agents.mcp import MCPServerSse
async def main():
async with MCPServerSse(
url="https://polish-academic-mcp.kolpol25.workers.dev/mcp"
) as mcp_server:
agent = Agent(
name="Asystent Naukowy",
model="gpt-4o",
mcp_servers=[mcp_server],
)
result = await Runner.run(
agent,
"Wyszukaj artykuły o fotosytezie z Biblioteki Nauki",
)
print(result.final_output)
asyncio.run(main())Możesz również użyć serwera MCP bezpośrednio przez Responses API:
from openai import OpenAI
client = OpenAI() # OPENAI_API_KEY z env
response = client.responses.create(
model="gpt-4o",
tools=[{
"type": "mcp",
"server_url": "https://polish-academic-mcp.kolpol25.workers.dev/mcp",
"server_label": "polish-academic",
"require_approval": "never",
}],
input="Znajdź polskie publikacje o uczeniu maszynowym",
)
print(response.output_text)Podłączenie z Google Gemini
Gemini CLI
Gemini CLI obsługuje serwery MCP przez plik konfiguracyjny.
Edytuj plik ~/.gemini/settings.json (utwórz jeśli nie istnieje):
{
"mcpServers": {
"polish-academic": {
"httpUrl": "https://polish-academic-mcp.kolpol25.workers.dev/mcp"
}
}
}Po zapisaniu pliku uruchom Gemini CLI normalnie — narzędzia będą dostępne automatycznie:
gemini "Wyszukaj publikacje o astrofizyce w repozytorium Jagiellońskim"Google AI Studio / Vertex AI Agent Builder
Otwórz projekt lub stwórz nowy
Przejdź do zakładki Tools → Add MCP server
Wpisz URL:
https://polish-academic-mcp.kolpol25.workers.dev/mcpZapisz i przetestuj w Playground
Dla Vertex AI Agent Builder konfiguracja jest analogiczna w zakładce Tools → Extensions → MCP.
Google ADK (Agent Development Kit — Python)
pip install google-adkfrom google.adk.agents import Agent
from google.adk.tools.mcp_tool import MCPToolset, SseServerParams
academic_tools = MCPToolset(
connection_params=SseServerParams(
url="https://polish-academic-mcp.kolpol25.workers.dev/mcp"
)
)
agent = Agent(
name="asystent_naukowy",
model="gemini-2.0-flash",
tools=[academic_tools],
instruction="Pomagasz w wyszukiwaniu polskiej literatury naukowej.",
)Podłączenie z Perplexity
Perplexity nie obsługuje natywnie protokołu MCP w interfejsie webowym.
Możliwe podejścia:
Przez OpenAI-compatible SDK (Sonar API + narzędzia)
Perplexity Sonar API jest zgodne z formatem OpenAI. Możesz opisać narzędzia MCP ręcznie jako schematy funkcji:
from openai import OpenAI
client = OpenAI(
api_key="<twój-klucz-perplexity>",
base_url="https://api.perplexity.ai",
)
# Przykładowe wywołanie z function calling
tools = [
{
"type": "function",
"function": {
"name": "ruj_search",
"description": "Szuka publikacji w Repozytorium UJ",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "Zapytanie"},
"page": {"type": "integer", "default": 0},
"size": {"type": "integer", "default": 10},
},
"required": ["query"],
},
},
}
]
response = client.chat.completions.create(
model="sonar-pro",
messages=[{"role": "user", "content": "Znajdź artykuły o kwantach"}],
tools=tools,
)Wywołania narzędzi musisz następnie obsłużyć ręcznie, przekazując je do serwera MCP przez HTTP.
Przez mcp-remote (lokalny proxy)
Jeśli używasz lokalnego klienta zgodnego z OpenAI tools, możesz uruchomić mcp-remote jako most:
# Zainstaluj mcp-remote
npm install -g mcp-remote
# Uruchom proxy (przekazuje wywołania MCP ↔ HTTP)
npx mcp-remote https://polish-academic-mcp.kolpol25.workers.dev/mcpProxy nawiązuje lokalne połączenie stdio, z którego możesz korzystać w dowolnym narzędziu obsługującym MCP stdio.
Inne klienty MCP
Wyślij żądanie HTTP POST do /mcp z nagłówkiem Accept: application/json, text/event-stream i treścią JSON-RPC 2.0.
Limity i buforowanie
Ograniczenie liczby żądań (Rate Limiting)
10 wywołań narzędzi na godzinę na adres IP klienta
Żądania protokołu (inicjalizacja, lista narzędzi, ping) nie są wliczane do limitu
Przy przekroczeniu limitu serwer zwraca HTTP 429 z nagłówkiem
Retry-After
Cache odpowiedzi API
Odpowiedzi z zewnętrznych API są buforowane w Cloudflare KV:
Baza danych | TTL cache |
Biblioteka Nauki — wyszukiwanie ( | 1 godzina |
Biblioteka Nauki — OAI-PMH ( | 24 godziny |
RCIN (OAI-PMH), POL-on, Baza Legalnych Źródeł ( | 24 godziny |
PBN — | 1 godzina |
PBN — | 24 godziny |
RUJ, AGH, AMU, UAFM, ICM, RODBuK, RePOD | 24 godziny |
dane.gov.pl, BDL (GUS), IMGW-PIB, NAC ( | 1 godzina |
PKN www ( | 1 godzina |
WIEDZA ( | brak cache KV (świeża sesja przy każdym wywołaniu) |
ISAP — | 1 godzina |
ISAP — | 24 godziny |
Biblioteka Sejmowa — | 1 godzina |
Biblioteka Sejmowa — | 24 godziny |
SAOS — | 1 godzina |
SAOS — | 24 godziny |
Wolne Lektury ( | 24 godziny |
Ninateka — | 1 godzina |
Ninateka — | 24 godziny |
Gapla — | 1 godzina |
Gapla — | 24 godziny |
Fototeka ( | 24 godziny |
FilmPolski ( | 24 godziny |
Dokumenty Śląska ( | 24 godziny |
Repozytorium FN — | 1 godzina |
Repozytorium FN — | 24 godziny |
Ludzie Nauki ( | 1 godzina |
Eksport danych ewaluacyjnych do Nextcloud (WebDAV)
Jeśli ustawisz EVAL_WEBDAV_ENABLED=true (w wrangler.jsonc/env), serwer zapisuje dane
ewaluacyjne dla każdego wywołania MCP tools/call do Nextcloud przez WebDAV.
Wymagane zmienne:
NEXTCLOUD_WEBDAV_BASE_URLNEXTCLOUD_WEBDAV_USERNAMENEXTCLOUD_WEBDAV_PASSWORD
Opcjonalne:
NEXTCLOUD_WEBDAV_PATH_PREFIX(domyślniemcp-eval)EVAL_WEBDAV_MAX_JSON_BYTES(domyślnie120000)
Dla każdego tools/call robione jest PUT pliku JSON do WebDAV:
NEXTCLOUD_WEBDAV_PATH_PREFIX/<tool>-<timestamp>-<uuid>.json.
Plik zawiera surową odpowiedź (w tym _span) oraz pole rqEval — policzone metryki
RQ1–RQ4, o ile wywołanie pasuje do przypadku testowego z scripts/eval/test-cases.ts.
Limity ogólne
Zasób | Limit |
Żądania | 100 000 / dobę |
Czas CPU | 10 ms / wywołanie |
Odczyty KV | 100 000 / dobę |
Zapisy KV | 1 000 / dobę |
Pamięć Worker | 128 MB |
Architektura techniczna
Klient MCP (Claude)
│ HTTP POST /mcp (JSON-RPC 2.0)
▼
Cloudflare Worker (index.ts)
├── Rate limit check (RATE_LIMIT_KV)
└── createMcpHandler(createServer(env))
└── tools/
├── biblioteka-nauki.ts → Biblioteka Nauki (JSON + OAI-PMH)
├── ruj.ts, agh.ts, amu.ts, uafm.ts, icm.ts → DSpace 7 REST
├── rodbuk.ts, repod.ts → Dataverse REST
├── dane.ts → dane.gov.pl API
├── polon.ts → RAD-on Open Data (POL-on)
├── pbn.ts → Polska Bibliografia Naukowa (PBN REST; wymaga `PBN_APP_ID` / `PBN_APP_TOKEN`)
├── bdl.ts → BDL GUS
├── rcin.ts → RCIN OAI-PMH
├── pkn.ts, wiedza.ts → PKN / WIEDZA (HTML)
├── blz.ts → bazalegalnychzrodel.pl (WordPress REST)
├── baztol.ts → BazTOL PUT (HTML)
├── nac.ts → NAC nac.gov.pl (RSS + WordPress REST)
├── sum.ts → katalog.sum.edu.pl — Aleph X-Server (XML)
├── isap.ts → api.sejm.gov.pl/eli
├── sejm-bs.ts → Biblioteka Sejmowa OPAC (HTML)
├── saos.ts → SAOS API
├── wolne-lektury.ts → Wolne Lektury API (JSON)
├── ninateka.ts → Ninateka / FINA (JSON)
├── gapla.ts → Gapla FINA (HTML)
├── fototeka.ts → Fototeka FN (HTML)
├── filmpolski.ts → FilmPolski.pl (parsowanie HTML → JSON / tekst)
├── fototekaslaska.ts → Fototeka Śląska MWO (parsowanie HTML → JSON / tekst)
├── filmoteka-repo.ts → Repozytorium FN (HTML / Solr)
├── dokumenty-slaska.ts → Dokumenty Śląska (statyczny HTML)
├── ludzie-nauki.ts → Ludzie Nauki REST
├── imgw.ts → IMGW public API
└── response-eval.ts → eval_response (lokalnie)Kluczowe decyzje projektowe:
Bezstanowy — nowa instancja
McpServerna każde żądanie (wymagane od SDK 1.26.0)Kompaktowe podsumowania JSON dla repozytoriów DSpace 7 (RUJ, AGH, AMU, UAFM, ICM) zamiast surowego HAL+JSON — zmniejsza zużycie tokenów
Surowe odpowiedzi XML/JSON/HTML bez warstwy normalizacji: Biblioteka Nauki (OAI-PMH XML oraz odpowiedź JSON z
/api/search; dokumentacja OAI: doc.bibliotekanauki.pl), RCIN (OAI-PMH), WordPress REST (Baza Legalnych Źródeł, treści na nac.gov.pl), RAD-on JSON (POL-on), PBN (JSON), dane.gov.pl, BDL (GUS), ELI / ISAP (api.sejm.gov.pl), IMGW, katalog ŚUM (Aleph X-Server XML), Biblioteka Sejmowa OPAC (HTML), Ninateka (JSON API frontu SPA), Gapla (HTML), Fototeka (HTML), Repozytorium FN (HTML / Solr), Dokumenty Śląska (statyczny HTML) — oszczędza czas CPUParsowanie HTML do JSON / tekstu (brak publicznego API pod wyszukiwarkę / galerię): FilmPolski.pl (
filmpolski_*), Fototeka Śląska (fototekaslaska_*) — mniejsze zużycie tokenów niż pełne strony HTMLNormalizacja wyników Dataverse dla
rodbuk_searchirepod_searchdo stabilnych pól (title,author,date,doi) przy zachowaniu danych źródłowychFire-and-forget zapisy do KV — nie blokują odpowiedzi
Aktualizacje implementacji (RQ3/RQ4)
W ramach hardeningu ewaluacji dodano:
Tryb minimalizacji danych osobowych (
minimize_pii) w:ruj_search— ukrywa pola autorów/afiliacji i redaguje typowe wzorce PII,bn_search_articles— redaguje wzorce PII w odpowiedzi XML (m.in. ORCID, e-mail, PESEL-like, phone-like).
Normalizację odpowiedzi Dataverse w:
rodbuk_search,repod_search.
Fallback odpornościowy w
bn_search_articles:gdy zapytanie z restrykcyjnym
setzwrócinoRecordsMatch, narzędzie ponawia zapytanie raz bezset(z zachowaniemfrom_date/until_dateimetadata_format).
Domyślne zachowanie narzędzi pozostaje bezpieczne wstecznie (minimize_pii=false), więc istniejące integracje nie wymagają zmian.
Rozwój i wkład
Przeczytaj CONTRIBUTING.md — wskazówki dotyczące zgłaszania błędów, propozycji nowych baz danych i tworzenia pull requestów.
Dla agentów AI kodujących w tym projekcie: przeczytaj AGENTS.md.
Licencja
MIT © 2026 Artur Sendyka vel. asterixix na poczet Polskiej Nauki z wykorzystaniem AI
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/asterixix/polish-academic-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server