huiwen-mcp
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., "@huiwen-mcp查一下《百年孤独》的馆藏信息"
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.
huiwen-mcp
Model Context Protocol (MCP) Server for the Huiwen Library Management System (Libsys / OPAC) — An AI-oriented read-only data gateway for libraries: Enables AI clients like Claude / Cherry Studio / DeepSeek to securely and audibly retrieve catalog records, item availability, circulation statistics, and union catalogs.
An official adaptation layer developed by a university library, adhering to the security baseline of read-only by default, least privilege, and full-chain auditing.
Protocol: Model Context Protocol (Anthropic open standard, same technical approach as Yale Library's catalog integration)
Runtime: Python ≥ 3.10 · FastMCP 3.x
Data Sources:
demo(zero-dependency demonstration) /opac(Huiwen OPAC public web protocol) /oracle(Huiwen Libsys database read-only direct connection)License: Apache-2.0 (recommended, see License & Compliance)
Table of Contents
Features
Capability | Description |
🔍 Catalog Search | Multi-field / CLC / Location / In-library filter / Sort / Pagination |
📚 Bibliographic Details | Full bibliographic record for a single item, all holding item status & circulation statistics |
✅ Item Availability | Quick check of borrowable status by ISBN / Barcode / Title |
🔥 Hot & New Books | Popular borrowing rankings, new book alerts for the last N days |
🧭 Classification Browsing | Real-time hit counts for CLC classifications/prefixes |
📊 Statistics | Total holdings / By location / By classification |
🤝 Union Catalog | PROCAT cross-library union search (optional, disabled by default, JWT authentication) |
👤 Patron Data (admin) | Current borrowing / Borrowing history / Fines (PII masked by default) |
🛡️ Security | Authentication → Rate Limiting → PII/Patron Gating → JSONL Auditing; read-only by default |
🔌 Transport | stdio (in-process) / Streamable HTTP (service-oriented) |
🐳 Deployment | Docker image (non-root, reproducible build); production/gateway-level authentication scheme in |
🧩 Pluggable Data Sources |
|
Design Trade-off: Write operations (renewal, reservation, interlibrary loan ordering) are intentionally not implemented — this project only provides "secure and auditable reading"; all write paths are delegated to the original business systems and manual processes.
System Design Philosophy
Positioning: Data Gateway / Skill Layer, Not a Database Proxy
AI clients (large language models) never directly connect to the Huiwen database. All queries are encapsulated through a controlled tool layer:
┌─────────────── AI 客户端(Claude / Cherry Studio / 自研 Agent / 本地 LLM) ───────────────┐
│ │ │
│ stdio(子进程协议) │ Streamable HTTP(服务化 / 网关 / SSO) │
└──────────────────────────────────────┼────────────────────────────────────────────────────┘
▼
┌───────────────────────────────────────────────────────────────────────────────────────┐
│ huiwen-mcp(FastMCP 3.x) │
│ ┌─────────────── 安全链 _guard ───────────────┐ │
│ │ 认证(Auth) → 限流(TokenBucket) → 门控(PII/读者) │ ← 每个工具必经 │
│ └──────────────────────────────────────────────┘ │
│ │ 工具层:search_books / get_book_detail / union_search / get_reader_* / … (12 个) │
│ └──────────────────────────────────┬───────────────────────────────────────────────────┘
▼
┌───────────────────────────────────────────────────────────────────────────────────────┐
│ 适配器(可插拔数据源,统一 CatalogBackend 接口) │
│ ├─ OracleBackend:白名单参数化 SQL(db/queries.py 封闭集) → 汇文 Libsys 只读账号 │
│ ├─ OpacBackend:白名单参数调汇文 OPAC 公开网页协议 → opac 站点 │
│ └─ DemoBackend:内置样例数据 → 离线演示/测试 │
└───────────────────────────────────────────────────────────────────────────────────────┘Single Responsibility per Layer: The adapter is only responsible for data retrieval;
_guardis only responsible for security; auditing independently writes JSONL logs; the upper-layer AI only interacts with tool signatures, unaware of backend differences (three backends, same signatures).Secure by Default:
data_source=demoruns with zero dependencies;opac/oraclerequire explicit configuration; patron-sensitive tools require an admin token; write operations are disabled by default; external union services are disabled by default.
Why MCP
MCP is an open standard for connecting AI to "databases/business systems" (Anthropic released Nov 2024, ecosystem includes GitHub/cloud vendors/database vendors). Choosing an open standard over a private API ensures: client replaceability (Claude/Cherry Studio/DeepSeek/custom Agent), service reusability across multiple systems, and long-term freedom from vendor lock-in — this is the same path Yale Library took with MCP for catalog integration.
FastMCP provides stdio / HTTP dual transport for server implementation, supporting both in-process and service-oriented deployment with a single codebase.
Transport Mode Selection: stdio vs HTTP
stdio: Launched in-process with the client, zero operations overhead, lowest latency, suitable for personal/single-machine integration with AI desktop clients.
HTTP (Streamable HTTP): Independent service, suitable for multi-user/centralized deployment; can be fronted by an OAuth2/JWT reverse proxy and campus unified identity for centralized auditing.
Implementation Technical Approach
Concern | Approach |
MCP Server |
|
Strict Tool Signature Constraints | FastMCP 3.x rejects tool functions with |
Authentication Chain |
|
Oracle Backend |
|
OPAC Backend | Whitelist parameters construct Huiwen public web protocol ( |
Union Catalog |
|
Configuration |
|
Models |
|
Key Contracts (All Verified Against Live Systems)
OPAC: Search results
<ol id="search_book_list">→<li class="book_list_info">, title/call number/holding copies/available copies/hit count; detail page item table; hot list.Union PROCAT:
POST(GET→405); authentication via query parametertk=(JWT issued by OPAC patron sessiongetReaderJwt);items[].logic="1"(AND)/"2"(OR); field mappingany/title/author/subject/isbn/clcNumber/publisher/series. Seedocs/union-catalog-search.mdfor details.
⚠️ OPAC / Union are vendor-closed or third-party systems; contracts may change with deployment versions. All integration documentation is based on "live system verification" and validated using
tests/test_*_live.py.
Quick Start
1) Installation
git clone <your-repo-url> && cd huiwen-mcp
# 方式 A:uv(推荐)
uv sync
# 方式 B:pip
python -m venv .venv
. .venv/bin/activate
pip install -e .2) Run with Zero Configuration (demo data source, offline)
HUIWEN_DATA_SOURCE=demo uv run huiwen-mcp # stdio 模式
HUIWEN_DATA_SOURCE=demo HUIWEN_TRANSPORT=http uv run huiwen-mcp # HTTP 模式demo includes sample bibliographic/patron data, suitable for smoke testing, development testing, and integration teaching.
2b) One-Click Docker Deployment
docker build -t huiwen-mcp:latest .
docker run --rm -it -e HUIWEN_DATA_SOURCE=demo huiwen-mcp:latest # stdio,离线可跑
# 服务化(HTTP + 认证 + 审计)
docker run -d --name huiwen -p 8765:8765 \
-e HUIWEN_TRANSPORT=http -e HUIWEN_DATA_SOURCE=opac \
-e HUIWEN_OPAC_BASE_URL=https://opac.example.edu.cn \
-e HUIWEN_AUTH_ENABLED=true -e HUIWEN_AUTH_BEARER_TOKEN=<强随机> \
-v huiwen-audit:/var/log/huiwen huiwen-mcp:latestMore (Oracle 11g thick / compose / reverse proxy-level authentication with campus CAS) in docs/deployment-guide.md.
3) Connect to Real Data Sources (opac / oracle)
Copy .env.example to .env and fill in the values (.env is git-ignored):
cp .env.example .env
# 编辑 .env:设置 HUIWEN_DATA_SOURCE 与对应凭据
HUIWEN_DATA_SOURCE=opac
HUIWEN_OPAC_BASE_URL=https://opac.example.edu.cn # 你们学校 OPAC 地址Or use config.local.json (sensitive configuration auto-loaded, not committed to repository).
Configuration (Environment Variables / .env)
All configurations can be injected via environment variables (prefix HUIWEN_), and also support .env files (auto-loaded).
Priority: Environment Variables > Explicit config.json / CONFIG_PATH > config.local.json Auto-Merge > Built-in Defaults.
General
Variable | Description | Default |
|
|
|
|
|
|
| HTTP listening |
|
| Whether to output patron sensitive fields (requires admin) |
|
| JSONL audit log path (leave empty to disable) | Empty |
| Local sensitive configuration file name |
|
OPAC
Variable | Description | Default |
| Huiwen OPAC root URL | |
| Search timeout (recycle bin is slow 15-40s, allow enough time) | 25s |
| Whether to allow personal data after patron login (disabled by default) | |
| Union catalog switch (disabled by default) | |
| Union service URL | |
| Tenant code | |
| Patron session JWT (entire |
Oracle
Variable | Description |
|
|
| Read-only account (strongly recommended) |
|
|
| Instant Client directory for thick mode |
| Semantic constraint for read-only (default true) |
| Connection pool size |
Security
Variable | Description |
| Whether to enable Bearer authentication (must enable in production) |
| Static Bearer Token |
| Comma-separated admin tokens (for patron/write-related export tools) |
| Token bucket rate limiting |
Tool List
Tool | Description | Token Required |
| Catalog search (field/CLC/location/in-library filter/sort/pagination) | — |
| Full bibliographic information for a single item (including all holding items and circulation statistics) | — |
| Check item availability by ISBN/Barcode/Title | — |
| Popular borrowing rankings (can be filtered by CLC category) | — |
| New book alerts for the last N days | — |
| CLC classification browsing/real-time prefix hit counts | — |
| Cross-library union catalog read-only search (disabled by default) | Configuration |
| Holdings statistics (total/by location/by classification) | — |
| Patron's current borrowing | admin |
| Patron's borrowing history | admin |
| Patron's fines | admin |
| Data source and service status | — |
For functional descriptions and integration assessment of Huiwen ACS/SIP2 interface services, see docs/huiwen-acs-sip2-interface-description-and-integration-assessment.md (authoritative field mapping, read-only subset candidates, explicitly prohibited items).
Patron tools are masked by default (include_pii=false does not return ID numbers/contact information; true requires admin).
Client Integration Examples
Claude Desktop / MCP-Supported Desktop Clients
{
"mcpServers": {
"huiwen": {
"command": "/path/to/uv",
"args": ["--directory", "/path/to/huiwen-mcp", "run", "huiwen-mcp"],
"env": { "HUIWEN_DATA_SOURCE": "demo" }
}
}
}Remote HTTP (Requires Authentication Gateway Setup)
HUIWEN_TRANSPORT=http HUIWEN_HOST=0.0.0.0 HUIWEN_PORT=8765 uv run huiwen-mcpClients use ${MCP_SERVER_URL} to connect to http://<host>:8765/mcp/ (Streamable HTTP).
When HUIWEN_AUTH_ENABLED=true is enabled, the token is passed as a tool parameter token with each call;
the HTTP Authorization header is not consumed by the server (see deployment guide §3.2).
Use Cases
User | Scenario |
Patron | "Is 'The Three-Body Problem' available, which floor, how many copies can be borrowed, what's popular nearby" — one-stop for finding books/studying/research |
Reference Librarian | Auto-check catalog/holdings → generate draft response → manual review (Copilot mode) |
Subject Librarian | Subject bibliographies, literature support statistics, departmental purchase recommendation reports |
Acquisitions/Cataloging | ISBN deduplication, gap analysis, new book alerts, metadata validation |
Library Leadership | Holdings/circulation statistics charts, data weekly reports |
AI Librarian Portal | As the core data layer for intelligent Q&A/intelligent book recommendations |
Consortium Building | Cross-library union search (gap found → search union → formal interlibrary loan) |
For complete suggestions (including locally deployed LLM + RAG layered approach and domestic/international benchmarking), see docs/service-and-application-suggestions.md.
Security & Compliance
Read-Only by Default: All tools are read-only; write operations (renewal/reservation/interlibrary loan ordering) are intentionally not implemented.
Whitelist SQL: The Oracle backend only executes the parameterized SQL closed set within
db/queries.py, no free SQL.Full-Chain Gating: Authentication → Rate Limiting → Patron/PII Gating → Auditing (JSONL). Patron personal data requires an admin token and is masked by default.
Authentication Contract (Verified Against Live System): The token is passed via the tool parameter
token(an optional parameter for each tool;_guardextracts it from the parameters and compares it withHUIWEN_AUTH_BEARER_TOKEN). The HTTPAuthorizationheader passthrough is not implemented — transport layer TLS/unified identity is handled by the reverse proxy gateway; huiwen-mcp's own authentication is the second line of defense behind the gateway. Tokens are not written to audit logs (_guardpops them before recording).Secrets Not Committed to Repository: DSN/password/JWT/site URLs are only passed via environment variables or
config.local.json(git-ignored). The repository contains no real deployment data (see NOTICE).External Services Handled with Caution: The Union PROCAT is a third-party multi-tenant system, disabled by default; confirm authorization with the union/service provider before enabling. OPAC is closed-source, has had public vulnerabilities historically; the adapter only uses whitelist parameters.
Vulnerability reporting and handling are in SECURITY.md.
Testing
File | Content | Run Command |
| Demo backend smoke test (offline) |
|
| stdio integration/authentication regression (demo) |
|
| Live database integration (disabled by default) |
|
| Union PROCAT live system (disabled by default) |
|
Live database/live system tests are disabled by default (require local explicit setting of HUIWEN_LIVE_* to execute) to avoid touching any real systems.
Docker images are not built/published by default (the release strategy is "publish only source code and documentation"): if an image is needed, please docker build locally (add --build-arg WITH_INSTANT_CLIENT=true for Oracle thick mode).
Project Structure
huiwen-mcp/
├── src/huiwen_mcp/
│ ├── server.py # FastMCP 装配、stdio/http 启动、main()
│ ├── config.py # 配置:env/.env/config.local.json 分层合并
│ ├── audit.py # JSONL 审计
│ ├── adapters/
│ │ ├── base.py # CatalogBackend 抽象
│ │ ├── demo.py # 内置演示数据
│ │ ├── opac.py # 汇文 OPAC 网页协议(含 union_search)
│ │ └── oracle.py # Libsys 数据库只读(thin/thick)
│ ├── db/queries.py # 白名单参数化 SQL(Oracle 后端唯一 SQL 来源)
│ ├── models/schemas.py # pydantic 结果模型
│ └── tools/catalog.py # 12 个 MCP 工具 + _guard 安全链
├── docs/ # 表结构 / 联盟契约 / 服务与应用建议 / 部署指南 / SIP2 评估
├── tests/ # demo/stdio/oracle-live/union-live
├── Dockerfile / compose.yaml / .dockerignore
├── .env.example / config.example.json / config.local.json(忽略)
├── LICENSE / NOTICE / SECURITY.md / CONTRIBUTING.md / CODE_OF_CONDUCT.md
└── pyproject.tomlRoadmap
Phase 1: Read-only search MCP (demo + opac + oracle three backends)
Phase 2: OPAC / Oracle live database integration testing, Union catalog integration testing (contract verified + token scheme)
Phase 2 Remaining: Docker image (non-root, reproducible build) + deployment guide (including reverse proxy-level authentication template)
Released:
v1.0.0tag + GitHub Release (source code and documentation; no CI/workflows, Docker images not automatically built)OAuth2/JWT gateway implementation for campus CAS / unified service portal (template ready, requires on-site configuration)
Phase 2.5/3 Candidate: Huiwen ACS/SIP2 read-only subset (assessment in docs/huiwen-acs-sip2-interface-description-and-integration-assessment.md)
Phase 3: RAG vector database + local LLM for intelligent book recommendations / reference consultation (see docs/service-and-application-suggestions.md)
Phase 4: Huiwen new-generation platform OpenAPI integration
License & Compliance
Open Source License Version Suggestion
This project recommends using the Apache License 2.0 (the repository includes the complete LICENSE):
Permissive: Allows universities, vendors, and cloud platforms to freely use/modify/redistribute (including commercial use) as long as the copyright and license notice are retained—facilitating adoption by AI toolchains and third-party systems.
Patent grant: Apache-2.0 explicitly grants a patent license from contributors (Section 3), making it clearer and more "anti-litigation" when multiple institutions/parties (multiple universities, technology vendors) contribute jointly.
Contributor terms standardization: Implicitly grants a project license (Section 5, Contribution Grant), eliminating the need for each contributor to sign a separate CLA, consistent with common GitHub open-source project practices.
Differentiation: Compared to MIT, Apache-2.0 is more suitable for infrastructure-type projects formally released by institutions and potentially maintained by multiple parties over the long term.
If your library prefers a "minimalist style," you can revert to MIT at any time: simply replace the full
LICENSEfile, changelicenseinpyproject.tomlback to{ text = "MIT" }, and update this section in the README.
Compliance Statement (Important)
Contains no vendor/third-party source code: This project is an independent interoperability layer for the closed-source Huiwen/Libsys. It does not contain any proprietary code from Huiwen or the consortium. The OPAC/consortium contract is based solely on public web protocols and real-site response records. See NOTICE.
No deployment-sensitive data is published with the repository: Actual DSNs, account passwords, OPAC login instances, consortium JWTs, reader PII, or vendor
SECRET_KEYare not in the repository (SECURITY.md/CONTRIBUTING.md has set red lines strictly prohibiting any suspected sensitive data from being committed).Trademarks:
Huiwen,Libsys, andOPACare trademarks/product names of their respective owners (e.g., Jiangsu Huiwen Software). This repository uses them only for interoperability reference, not implying endorsement or affiliation.Before using this software, please confirm the authorization and usage boundaries with Huiwen Software, the consortium service provider, and your library's IT center.
Troubleshooting
Phenomenon | Handling |
"Backend not supported" | Verify |
Oracle | For 11g use |
OPAC search timeout | The site side is slow (15–40s common); increase |
| Consortium not enabled or token missing → enable configuration and fill in JWT. |
Consortium returns | JWT expired → re-login to OPAC, get |
Framework rejects tool registration ( | Tool functions must have explicit parameters; do not use |
Reader tool returns "requires admin token" | Use a token from |
This server cannot be installed
Maintenance
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
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Hosted MCP server exposing US hospital procedure cost data to AI assistants
Read-only MCP connector serving the Run It on AI book; index and Implementation Blocks are free.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/isaacwang2023-droid/huiwen-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server