Skip to main content
Glama

mcp-mercy

Server Model Context Protocol (MCP) untuk menelusuri katalog Digilib dan metadata UMB Repository Universitas Mercu Buana melalui aplikasi AI yang mendukung MCP.

MCP ini menyediakan tujuh tool melalui transport stdio. Pencarian menggunakan halaman dan endpoint publik kampus. Proyek ini merupakan integrasi independen dan tidak berafiliasi secara resmi dengan Universitas Mercu Buana.

Fitur

Tool

Kegunaan

catalog_fields

Membaca nama field, nilai awal, dan pilihan filter katalog

catalog_search

Mencari jurnal, tugas akhir, buku, penelitian, artikel, dan e-book

catalog_item

Membaca detail tugas akhir atau buku berdasarkan ID

repository_search

Mencari metadata dan tautan dokumen EPrints

repository_item

Membaca abstrak, penulis, dan label pembatasan akses per file

repository_oai

Mengakses enam operasi OAI-PMH, termasuk pagination dengan token

auth_status

Memeriksa keberadaan sesi Portal lokal tanpa menampilkan nilai cookie

Related MCP server: huiwen-mcp

Persyaratan

  • Node.js 22.22 atau lebih baru; Node.js 24 disarankan.

  • npm dan akses HTTPS ke situs kampus.

  • Chrome/Chromium dan desktop grafis hanya untuk login Portal opsional.

Instalasi

Instalasi dari npm, berlaku pada Linux, macOS, dan Windows:

npm install --global mcp-mercy
mercy --version

Alternatif curl untuk Linux/macOS:

curl -fsSL https://raw.githubusercontent.com/kiryuken/mcp-mercy/main/scripts/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"
mercy --help

Installer PowerShell, instalasi dari checkout lokal, pembaruan, dan penghapusan dijelaskan di panduan instalasi.

Versi 1.0.0 tersedia di npm. Instalasi source GitHub dan curl memakai branch main repositori ini.

Konfigurasi klien MCP

Pilih harness yang dipakai setelah instalasi:

Harness

Konfigurasi sesuai lokasi instalasi

Panduan

OpenCode 1.x

mercy config opencode

OpenCode

OpenCode V2

mercy config opencode --v2

OpenCode V2

Claude Code

mercy config claude

Claude Code

Codex

mercy config codex

Codex

mercy config mencetak konfigurasi dengan path absolut Node.js dan CLI lokal. Salin atau gabungkan hasilnya ke konfigurasi harness; perintah ini tidak mengubah file konfigurasi Anda. Cara ini juga menghindari masalah PATH dan shim npm pada aplikasi desktop atau Windows.

Jalankan server secara langsung bila diperlukan:

mercy serve

Server memakai stdio dan menunggu pesan MCP di stdin tanpa banner stdout. Binary mcp-mercy tetap tersedia untuk kompatibilitas. Contoh konfigurasi statis tersedia di examples/.

Contoh penggunaan

Temukan nama filter terlebih dahulu:

catalog_fields(collection="tugas_akhir")
catalog_search(collection="tugas_akhir", filters={"Judul_Skripsi1":"artificial"}, limit=5)
catalog_item(collection="tugas_akhir", id="0000095312")
repository_search(query="artificial intelligence", page=0, limit=5)
repository_item(eprintId="104728")
repository_oai(verb="Identify")
repository_oai(verb="ListRecords", metadataPrefix="oai_dc", limit=100)

ID pada contoh berasal dari record publik dan ketersediaannya dapat berubah. Parameter lengkap dan format hasil dijelaskan di referensi tool.

Login Portal opsional

Pencarian katalog dan repository tidak memerlukan sesi Portal. Utilitas login membantu menyimpan sesi browser secara lokal untuk diperiksa dengan auth_status:

mercy login

CLI menampilkan tautan Portal dan mencoba membuka browser yang didukung pada Linux, macOS, atau Windows. Selesaikan login dan CAPTCHA secara manual, lalu tekan Enter di terminal. State browser disimpan di ~/.mcp-mercy/portal-state.json dengan izin 0600 pada sistem POSIX. File dapat berisi cookie dan local storage; perlakukan sebagai kredensial.

Jika browser gagal dibuka, CLI mencoba browser bawaan dan tetap menyediakan tautan login. Login melalui tautan/browser bawaan tidak menyalin sesi browser tersebut ke MCP. Pasang browser yang didukung atau set MERCUBUANA_CHROME, lalu ulangi mercy login untuk menyimpan sesi.

mercy login --url
mercy status

Sesi Portal tidak dikirim dalam permintaan katalog atau repository dan tidak membuka akses PDF yang dibatasi oleh akun EPrints. auth_status hanya memeriksa state lokal; loggedIn: null berarti sesi tersedia tetapi login belum diverifikasi ke Portal. Detail konfigurasi dan migrasi sesi lama tersedia di panduan konfigurasi.

Pengujian

npm run check
npm run test:coverage
npm run test:live

check menjalankan lint, pemeriksaan format, dan pengujian offline. Pengujian live terpisah karena membutuhkan jaringan dan bergantung pada layanan kampus. Keduanya menggunakan assertion; kegagalan menghasilkan exit code nonzero.

GitHub Actions dikonfigurasi untuk pemeriksaan offline, coverage, audit dependensi, dan validasi paket pada Node.js 22 serta 24 di Linux, macOS, dan Windows. Pengujian live dapat dijalankan manual dari tab Actions. Lihat strategi pengujian dan hasil QA.

Struktur proyek

mcp-mercy/
  bin/                  CLI mercy, entry point server, dan utilitas login
  src/                  Implementasi MCP, HTTP, parser, validasi, dan sesi
  scripts/              Installer curl/POSIX dan PowerShell
  test/
    fixtures/           HTML/XML sintetis untuk pengujian offline
    live/               Pengujian layanan kampus melalui klien MCP stdio
    *.test.mjs          Pengujian unit, integrasi, dan CLI
  docs/                 Konfigurasi, referensi tool, pengujian, dan laporan QA
  examples/             Contoh konfigurasi klien
  .github/workflows/    CI dan pengujian live manual

Batasan

  • Struktur HTML kampus dapat berubah. Halaman pembatasan akses, respons kosong, atau struktur utama yang tidak dikenali dilaporkan sebagai error.

  • Detail tugas akhir dapat hanya menampilkan sebagian metadata. Gunakan hasil pencarian ketika halaman detail tidak lengkap.

  • Label pembatasan file bersumber dari HTML, tanpa permintaan atau unduhan PDF. Nilai restricted: null berarti akses belum diverifikasi.

  • limit membatasi output lokal. Pencarian repository mengikuti halaman sumber yang biasanya berisi 20 hasil. Token OAI melanjutkan setelah seluruh batch sumber; periksa truncated sebelum melanjutkan.

  • Tidak ada crawler, retry otomatis, cache, atau pembatas laju global. Jalankan permintaan secara wajar dan ikuti ketentuan perpustakaan.

Kontribusi dan lisensi

Panduan pengembangan tersedia di CONTRIBUTING.md. Penanganan informasi sensitif dijelaskan di SECURITY.md, dan perubahan dicatat di CHANGELOG.md.

Kode proyek menggunakan lisensi ISC. Hak atas metadata, dokumen, dan layanan sumber tetap berada pada pemiliknya.

Available Tools

7 tools
auth_statusA
Read-onlyIdempotent

Periksa sesi Portal lokal tanpa nilai cookie. Tidak memverifikasi login ke server Portal.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description earns credit for adding the non-obvious caveat that a positive result does not mean the Portal server login is valid, and that no cookie value is consumed — context an agent would otherwise misread.

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 short sentences with no waste, and the positive scope is front-loaded ahead of the limitation. Nothing redundant or padded.

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?

For a zero-parameter, read-only, closed-world probe with full annotations and no output schema, the description covers what it checks and what it does not. It stops short of hinting at the return shape or what a failure means, which would have made it fully self-sufficient.

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?

Zero parameters, so the baseline is 4; the schema is empty and fully described. The phrase 'tanpa nilai cookie' usefully confirms that no credential input is expected, preventing an agent from trying to pass one.

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

Purpose4/5

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

States a specific verb and resource ('Periksa sesi Portal lokal') plus an explicit negative scope ('Tidak memverifikasi login ke server Portal'), so the agent knows this reports cached/local session state rather than server-validated auth. Sibling tools (catalog_*, repository_*) are unrelated domains, so sibling differentiation isn't required here.

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

Usage Guidelines3/5

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

Usage is only implied: the agent can infer this is a cheap pre-flight check, but the description never says when to call it versus when server-side verification is actually needed, and names no alternative. The exclusion clause helps steer but isn't a full when-to-use rule.

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

catalog_fieldsC
Read-onlyIdempotent

Tampilkan field dan opsi pencarian katalog Digilib Mercu Buana.

NameRequiredDescriptionDefault
collectionYes

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond purpose: it does not say whether results vary per collection, whether the option list is static or live, or what the response looks like.

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

Conciseness4/5

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

A single front-loaded sentence with no filler. It is efficient, though its brevity reflects under-specification rather than disciplined economy.

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

Completeness2/5

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

With no output schema, the description carries the burden of explaining return values, yet 'field dan opsi pencarian' is the only hint at output shape. For a per-collection discovery tool, the agent is left guessing what it will receive and how to use it before calling catalog_search.

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

Parameters2/5

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

Schema description coverage is 0% and the description never mentions the single 'collection' parameter. It does not explain that the returned fields/options are scoped to the chosen collection, nor what the six enum values mean, leaving the schema's bare enum as the only signal.

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

Purpose4/5

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

States a specific verb and resource: 'Tampilkan field dan opsi pencarian katalog' (display catalog search fields and options). An agent can tell this is a schema/discovery tool rather than a search or fetch tool. It does not, however, name or contrast itself with siblings like catalog_search or catalog_item.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance, no prerequisite (e.g., call before catalog_search to discover valid field names), and no mention of alternatives. The agent must infer the discovery role from the verb alone.

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

catalog_itemC
Read-onlyIdempotent

Ambil detail tugas akhir atau buku berdasarkan ID numerik.

NameRequiredDescriptionDefault
idYes
collectionYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnly, idempotent, non-destructive, and openWorld, so safety is covered. The description adds nothing beyond that — no note on what happens if the ID doesn't exist, what fields are returned, or whether the two collections return different shapes.

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

Conciseness4/5

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

A single front-loaded sentence with no wasted words. It is efficient, though the terseness contributes to the missing detail elsewhere.

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

Completeness3/5

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

For a simple two-parameter read tool with strong annotations, the description covers the basics. With no output schema, it should say more about what the detail response contains or how the two collections differ, so the agent knows what to expect.

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?

Schema coverage is 0%, so the description must carry weight. It does partially compensate: 'tugas akhir atau buku' names the two values of the collection enum, and 'ID numerik' explains the id format. However, it does not explain that collection is required to disambiguate the same ID across collections, which is essential for correct invocation.

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

Purpose4/5

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

States a specific verb (ambil) and resource (detail tugas akhir atau buku) keyed by ID, which is clear enough to understand the operation. It does not differentiate itself from siblings like catalog_search or repository_item, which also return item-level data.

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

Usage Guidelines2/5

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

No guidance on when to use this versus catalog_search (query-based discovery) or repository_item. The 'based on numeric ID' clause implies it is a direct-lookup tool, but the agent must infer that condition itself.

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

repository_itemB
Read-onlyIdempotent

Ambil metadata, abstrak, dan label pembatasan akses per file. Akses PDF tidak diverifikasi.

NameRequiredDescriptionDefault
eprintIdYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, covering the safety profile. The description adds a useful limitation—PDF access is not verified—but does not disclose authentication needs, rate limits, or response behavior beyond the returned content list.

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 short sentences with no filler, and the primary purpose is front-loaded before the access caveat. Every sentence adds either scope or a behavioral note.

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

Completeness3/5

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

The tool is simple and the description indicates the returned content, which is helpful because there is no output schema. However, it omits parameter meaning and usage context, so an agent still has gaps for correct invocation.

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

Parameters2/5

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

There is one required parameter (eprintId) and schema description coverage is 0%, so the description should compensate but does not. It mentions 'per file' without explaining that the input is an eprint ID or what the numeric pattern means, leaving parameter meaning ambiguous.

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

Purpose4/5

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

States a specific verb ('Ambil') and specific resources ('metadata, abstrak, dan label pembatasan akses per file'), so an agent knows what is returned. It does not distinguish itself from sibling tools like catalog_item or repository_search, 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.

Usage Guidelines2/5

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

Provides no explicit when-to-use guidance, no exclusions, and no named alternatives. The caveat 'Akses PDF tidak diverifikasi' is a behavioral note, not a usage rule.

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

repository_oaiC
Read-onlyIdempotent

Query OAI-PMH UMB. resumptionToken eksklusif; limit memotong output batch lokal.

NameRequiredDescriptionDefault
setNo
fromNo
verbYes
limitNo
untilNo
identifierNo
metadataPrefixNo
resumptionTokenNo

TDQS

C2.6/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds two traits beyond that: resumptionToken is exclusive, and limit truncates the local batch output (a warning that results are cut, not an error). That truncation caveat is meaningful behavioral disclosure, but the telegraphic phrasing leaves pagination/continuation behavior unclear.

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

Conciseness3/5

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

Two short clauses, no filler, and the most unusual constraint (resumptionToken exclusivity) is front-loaded after the purpose. It is efficient to the point of being telegraphic and mixes languages, so it is compact but not fully parseable as structured guidance.

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

Completeness2/5

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

This is an 8-parameter, enum-driven protocol tool with no output schema and zero schema descriptions, so the description carries the full explanatory burden. Covering only 2 of 8 parameters, with no explanation of how verb shapes the response, leaves an agent unable to call it correctly for anything but the simplest case.

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

Parameters2/5

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

Schema description coverage is 0% across 8 parameters, so the description must compensate and it does not. It only touches resumptionToken (exclusive) and limit (truncating), leaving verb, metadataPrefix, set, from, until and identifier entirely unexplained — and the verb enum, which selects completely different operations, is never described. This is a significant gap against a 0%-coverage schema.

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

Purpose3/5

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

It names a specific verb and protocol ("Query OAI-PMH") plus a repository identifier ("UMB"), so the resource is identifiable to someone who knows OAI-PMH. However, "UMB" is opaque and nothing distinguishes this from the sibling repository_search or catalog_search tools. It is a vague-purpose score: the agent knows roughly what domain this touches but not exactly what it returns.

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

Usage Guidelines2/5

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

"resumptionToken eksklusif" does convey one real usage constraint (the token cannot be combined with other parameters), which is genuinely helpful. But there is no when-to-use guidance, no mention of alternatives like repository_search, and no indication of which verb to pick for which task. One inline constraint is not usage guidance.

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.

  1. 7 tool updatesv1.0.0
    • First observedauth_status
    • First observedcatalog_fields
    • First observedcatalog_item
    • First observedcatalog_search
    • First observedrepository_item
    • First observedrepository_oai
    • First observedrepository_search

TDQS

B3.2/5.0

Scored across 7 tools

Disambiguation4/5

The tools are mostly separable by resource: catalog_* targets the Digilib catalog, repository_* targets EPrints/OAI, and auth_status handles session status. There is some potential overlap between repository_search and repository_oai, but the descriptions clarify that one searches metadata while the other uses OAI-PMH.

Naming Consistency4/5

All names use consistent snake_case with a clear resource prefix such as catalog_, repository_, or auth_. The pattern is not strictly verb_noun, but it is predictable enough that an agent can infer tool categories.

Tool Count5/5

Seven tools is well-scoped for a read-only catalog and repository access server. Each tool covers a distinct operation such as field discovery, search, item detail, OAI query, or session status.

Completeness4/5

The surface covers discovery, search, item retrieval, OAI-PMH access, and local auth status for the apparent library/repository domain. Minor gaps remain around pagination for catalog_search and verified access/download workflows, but core read-only workflows are covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    MCP server for searching Ex Libris Primo library catalogues and subscribed databases, enabling search, record retrieval, autocomplete, citation generation, and export to BibTeX, RIS, or CSV.
    5
    9
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Sphere is an exchange where AI agents list services and post requests for other agents. Registration is one request, free, with no human approval. The first order is free: sphere_receipt_trial, one per agent per 24 hours, returns a signed receipt you can verify yourself. Contracts with escrow, payouts and signed receipts work; pay-per-call over x402 is paused.
    MIT