This release is a pre-release and may not be stable for production use.
Pustaka is an MCP server that searches thesis repositories across 75+ Indonesian universities — PTN, PTS, and Polytechnics — via OAI-PMH harvesting and HTML scraping. It detects which theses are truly full-text (Bab 1 through Daftar Pustaka) by analyzing PDF content directly.
This is a port of pencari-skripsi-indonesia (MIT) by Yingtze — original credit below.
Quick Start
# Install
pip install "pustaka-mcp[pdf]"
# Run (stdio transport)
pustaka
With uvx
uvx pustaka-mcp
Claude Desktop config
{
"mcpServers": {
"pustaka": {
"command": "uvx",
"args": ["pustaka-mcp"]
}
}
}
Tools
| Tool | Description |
|---|---|
search_thesis |
Search by keyword, filter by university/type/province. Returns results with full/partial/locked status. |
list_universities |
List all supported universities, filter by type (PTN/PTS) or province. |
analyze_pdf |
Deep PDF content analysis — detects chapters inside the document, estimates page count, checks access. |
search_and_analyze |
Combined search + PDF analysis in one call. Slower but returns accurate status immediately. |
Resources
skripsi://universities— all universities as JSONskripsi://stats— repository statistics
Status Meanings
| Status | Meaning |
|---|---|
| ✅ FULL | Chapters 1, 3, 4, 5 and bibliography detected inside the PDF |
| 🟡 PARTIAL | Some chapters found — incomplete or HTML-only detection |
| 🔴 LOCKED | PDF exists but requires login/embargo |
| ⚪ UNKNOWN | Cannot determine automatically |
Environment Variables
| Variable | Default | Description |
|---|---|---|
SKRIPSI_DELAY |
1.2 |
Delay between requests (seconds) |
SKRIPSI_WORKERS |
5 |
Number of parallel threads |
SKRIPSI_NO_CACHE |
0 |
Set to 1 to disable local cache |
Requirements
- Python 3.10+
pdfminer.six(optional, for PDF content analysis — recommended)
pip install pustaka-mcp[pdf]
Without pdfminer.six, the server works but uses HTML-only detection (less accurate).
Structure
├── src/pustaka/
│ ├── __init__.py ← version
│ ├── models.py ← data models + scoring
│ ├── pdf_analyzer.py ← PDF content analysis
│ ├── engine.py ← OAI-PMH + HTML scraping engine
│ └── server.py ← FastMCP server
├── tests/
│ └── test_mcp.py ← 35+ unit tests
├── repositories.json ← 75+ university configs
├── .vscode/
│ └── PORT_FROM_PREVIOUS_REPO.md ← port notes
├── pyproject.toml
├── LICENSE
└── README.md
Original Work
This project is a port of pencari-skripsi-indonesia by Yingtze, released under the MIT License. The original work provides the core repository configurations, OAI-PMH harvesting logic, HTML parsers, and PDF analysis heuristics that make this possible.
Without Yingtze's groundwork of cataloging 75+ Indonesian university repositories and building the scraping infrastructure, this MCP server would not exist.
License
AGPL-3.0-only — This port. See LICENSE.
The original pencari-skripsi-indonesia is MIT licensed.
Release files for pustaka-mcp 0.1.1b1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pustaka_mcp-0.1.1b1.tar.gz | 22.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pustaka_mcp-0.1.1b1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 41.0 kB
Release files / pustaka_mcp-0.1.1b1.tar.gz
| Download URL | pustaka_mcp-0.1.1b1.tar.gz |
|---|---|
| Size | 22.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5ac04d322db5533f1b8f287db6c35ad074206f339c3c4c89b4a01fbf540f2fb0
|
|
BLAKE2b-256 checksum How to use checksums |
55ef911e06ef117878cb669f288c67c310a89811f5c33967a49ff7fa61b872cc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.15 {"installer":{"name":"uv","version":"0.12.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / pustaka_mcp-0.1.1b1-py3-none-any.whl
| Download URL | pustaka_mcp-0.1.1b1-py3-none-any.whl |
|---|---|
| Size | 19.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
06e6b30f1acfe53055641cde42ffebaa45b78f97f08d96b346b15f7e512bca8f
|
|
BLAKE2b-256 checksum How to use checksums |
1e8ad2feb4380b240429befc74b1dd220d245db069e2bd725f996c56701915e0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.15 {"installer":{"name":"uv","version":"0.12.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|