Skip to main content
Glama

huiwen-mcp

Servidor Model Context Protocol (MCP) para el sistema de gestión de bibliotecas Huiwen (Libsys / OPAC) — Puerta de enlace de datos de solo lectura para bibliotecas orientada a la IA: permite que clientes de IA como Claude, Cherry Studio, DeepSeek recuperen de forma segura y auditable el catálogo de la biblioteca, ejemplares disponibles, estadísticas de circulación y el catálogo colectivo de la alianza.

Capa de adaptación oficial desarrollada por el equipo de la biblioteca universitaria, que cumple con la línea base de seguridad de solo lectura por defecto, privilegios mínimos y auditoría de extremo a extremo.

  • Protocolo: Model Context Protocol (estándar abierto de Anthropic, misma ruta técnica que la integración del catálogo de la Biblioteca de Yale)

  • Entorno de ejecución: Python ≥ 3.10 · FastMCP 3.x

  • Fuentes de datos: demo (demostración sin dependencias) / opac (protocolo web público de OPAC Huiwen) / oracle (conexión directa de solo lectura a la base de datos Libsys Huiwen)

  • Licencia: Apache-2.0 (esquema recomendado, ver Licencia y cumplimiento)


Índice

  1. Características

  2. Enfoque de diseño del sistema

  3. Esquema técnico de implementación

  4. Inicio rápido

  5. Configuración (variables de entorno / .env)

  6. Lista de herramientas

  7. Ejemplos de integración de clientes

  8. Casos de uso

  9. Seguridad y cumplimiento

  10. Pruebas

  11. Estructura del proyecto

  12. Hoja de ruta

  13. Licencia y cumplimiento

  14. Solución de problemas


Related MCP server: dms-mcp-server

Características

Capacidad

Descripción

🔍 Búsqueda en catálogo

Búsqueda multicampo / por clasificación China / por ubicación / filtro de disponibles / ordenación / paginación

📚 Detalles del libro

Registro bibliográfico completo, estado de todos los ejemplares y estadísticas de circulación

✅ Disponibilidad de ejemplares

Consulta rápida de disponibilidad por ISBN / código de barras / título

🔥 Populares y novedades

Ranking de préstamos populares, nuevas adquisiciones de los últimos N días

🧭 Navegación por clasificación

Conteo en tiempo real de clasificación/prefijo de la Clasificación China

📊 Estadísticas

Total de fondos / por ubicación / por clasificación

🤝 Catálogo colectivo de la alianza

Búsqueda conjunta PROCAT entre bibliotecas (opcional, desactivado por defecto, autenticación JWT)

👤 Datos del lector (admin)

Préstamos actuales / historial de préstamos / deudas (PII desensibilizado por defecto)

🛡️ Seguridad

Autenticación → Limitación de velocidad → Control de PII/lector → Auditoría JSONL; solo lectura por defecto

🔌 Transporte

stdio (en proceso) / Streamable HTTP (como servicio)

🐳 Despliegue

Imagen Docker (no root, reproducible); ver esquema de autenticación a nivel de producción/puerta de enlace en docs/guía-de-despliegue.md

🧩 Fuente de datos enchufable

demo / opac / oracle conmutación con un solo clic, mismas herramientas firmadas

Compensaciones de diseño: Las operaciones de escritura (renovación, reserva, pedidos de préstamo interbibliotecario) no se implementan intencionadamente — este proyecto solo se dedica a “leer de forma segura y auditable”; las rutas de escritura se delegan completamente al sistema de negocio original y a los procesos manuales.


Enfoque de diseño del sistema

Posicionamiento: puerta de enlace de datos / capa de habilidades, no un proxy de base de datos

Los clientes de IA (modelos grandes) nunca se conectan directamente a la base de datos Huiwen. Todas las consultas pasan por una capa de herramientas controladas:

┌─────────────── 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:内置样例数据                                 → 离线演示/测试            │
└───────────────────────────────────────────────────────────────────────────────────────┘
  • Responsabilidad única por capa: el adaptador solo se encarga de obtener datos; _guard solo se encarga de la seguridad; la auditoría escribe JSONL de forma independiente; la IA de nivel superior solo interactúa con las firmas de las herramientas, sin percibir las diferencias del backend (tres backends con la misma firma).

  • Seguridad por defecto: data_source=demo se ejecuta sin dependencias; opac/oracle requiere configuración explícita; las herramientas sensibles del lector requieren un token de administrador; las operaciones de escritura están deshabilitadas por defecto; los servicios de alianza externos están desactivados por defecto.

Por qué MCP

  • MCP es un estándar abierto de IA para conectar “bases de datos/sistemas de negocio” (lanzado por Anthropic en noviembre de 2024, ecosistema que incluye GitHub/proveedores de nube/proveedores de bases de datos). Elegir un estándar abierto en lugar de una API privada garantiza: clientes reemplazables (Claude/Cherry Studio/DeepSeek/Agente propio), servicio reutilizable por múltiples sistemas, sin bloqueo a largo plazo por parte del proveedor — esta es la misma ruta que la Biblioteca de Yale utiliza para integrar su catálogo con MCP.

  • FastMCP proporciona transporte dual stdio/HTTP para la implementación del servidor, un solo código base compatible con despliegue en proceso y como servicio.

Elección del modo de transporte: stdio vs HTTP

  • stdio: en proceso, se inicia con el cliente, sin operaciones, menor latencia, adecuado para uso personal/individual con clientes de escritorio de IA.

  • HTTP (Streamable HTTP): servicio independiente, adecuado para despliegue multiusuario/centralizado; se puede colocar un proxy inverso OAuth2/JWT delante con identidad unificada del campus, para auditoría centralizada.


Esquema técnico de implementación

Aspecto

Esquema

Servidor MCP

fastmcp>=2,<4; registro con add_tool; run() dual stdio/http

Restricción estricta de firmas de herramientas

FastMCP 3.x rechaza funciones con *args/**kwargs → todas las herramientas tienen parámetros explícitamente tipados; _guard usa functools.wraps y pasa kwargs (modelo de token explícito, evita que **kwargs active el rechazo del framework)

Cadena de autenticación

AuthConfig (Bearer) + RateLimit (cubo de tokens) + Control de capa de lector/PII (token de administrador) + AuditLogger (JSONL)

Backend Oracle

python-oracledb; 11g → modo thick (Instant Client), 12c+ → thin; todo SQL encapsulado en db/queries.py (parametrizado, lista blanca, cuenta de solo lectura)

Backend OPAC

Parámetros de lista blanca para construir el protocolo web público de Huiwen (búsqueda openlink.php / detalle item.php / populares top_lend.php), analiza las plantillas HTML públicas (selectores verificados elemento por elemento con la plantilla del proveedor)

Catálogo colectivo de la alianza

POST {base}/api/search/listByQuery + {current,pageSize,items:[{field,value,logic,type}]} + ?tenantCode&tk=<JWT> (contrato verificado con sitio real); desactivado por defecto

Configuración

Variables de entorno HUIWEN_ (carga automática de .env) + config.local.json (valores sensibles, git-ignored, fusión automática)

Modelos

Modelos de resultado explícitos con pydantic, seguridad de tipos, serialización estable

Contratos clave (todos verificados con pruebas reales)

  • OPAC: resultados de búsqueda <ol id="search_book_list"> → <li class="book_list_info">, título / signatura / ejemplares en fondo / ejemplares disponibles / número de resultados; tabla de ejemplares en página de detalle; ranking de populares.

  • Alianza PROCAT: POST (GET→405); autenticación con parámetro de consulta tk= (JWT emitido por la sesión de lector de OPAC getReaderJwt); items[].logic="1"(AND)/"2"(OR); mapeo de campos any/title/author/subject/isbn/clcNumber/publisher/series. Ver detalles en docs/búsqueda-catálogo-colectivo-alianza.md.

⚠️ Tanto OPAC como la alianza son sistemas cerrados del proveedor o de terceros, los contratos pueden variar según la versión del despliegue. Toda la documentación de integración se basa en “verificación con sitio real” y se registra con tests/test_*_live.py.


Inicio rápido

1) Instalación

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) Ejecución sin configuración (fuente de datos demo, sin conexión)

HUIWEN_DATA_SOURCE=demo uv run huiwen-mcp        # stdio 模式
HUIWEN_DATA_SOURCE=demo HUIWEN_TRANSPORT=http uv run huiwen-mcp   # HTTP 模式

demo incluye datos de muestra de libros/lectores, útil para pruebas de humo, pruebas e integración didáctica.

2b) Despliegue con Docker con un solo comando

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:latest

Más información (Oracle 11g thick / compose / autenticación a nivel de proxy inverso con CAS del campus) en docs/guía-de-despliegue.md.

3) Integración con fuentes de datos reales (opac / oracle)

Copie .env.example como .env y complete (.env está en git-ignore):

cp .env.example .env
# 编辑 .env:设置 HUIWEN_DATA_SOURCE 与对应凭据
HUIWEN_DATA_SOURCE=opac
HUIWEN_OPAC_BASE_URL=https://opac.example.edu.cn      # 你们学校 OPAC 地址

O use config.local.json (configuración sensible cargada automáticamente, no en el repositorio).


Configuración (variables de entorno / .env)

Toda la configuración se puede inyectar mediante variables de entorno (prefijo HUIWEN_), también compatible con archivo .env (carga automática). Prioridad: Variables de entorno > config.json explícito / CONFIG_PATH > fusión automática de config.local.json > valores predeterminados incorporados.

General

Variable

Descripción

Valor predeterminado

HUIWEN_DATA_SOURCE

demo / opac / oracle

demo

HUIWEN_TRANSPORT

stdio / http

stdio

HUIWEN_HOST / HUIWEN_PORT

Escucha HTTP

127.0.0.1 / 8765

HUIWEN_INCLUDE_PII

Si se muestran campos sensibles del lector (requiere admin)

false

HUIWEN_AUDIT_LOG

Ruta del archivo de registro de auditoría JSONL (vacío para desactivar)

vacío

HUIWEN_CONFIG_LOCAL_PATH

Nombre del archivo de configuración local sensible

config.local.json

OPAC

Variable

Descripción

HUIWEN_OPAC_BASE_URL

URL raíz del OPAC de Huiwen

HUIWEN_OPAC_TIMEOUT

Tiempo de espera de búsqueda (la papelera de reciclaje es lenta 15-40s, dar suficiente)

25s

HUIWEN_OPAC_ALLOW_READER_SESSION

Si se permiten datos personales del lector tras inicio de sesión (desactivado por defecto)

HUIWEN_OPAC_UNION_ENABLED

Interruptor del catálogo colectivo de la alianza (desactivado por defecto)

HUIWEN_OPAC_UNION_BASE_URL

Dirección del servicio de la alianza

HUIWEN_OPAC_UNION_TENANT

Código del inquilino

HUIWEN_OPAC_UNION_TOKEN

JWT de sesión del lector (cadena completa de getReaderJwt)

Oracle

Variable

Descripción

HUIWEN_ORACLE_DSN

host:port/service o Easy Connect

HUIWEN_ORACLE_USER / _PASSWORD

Cuenta de solo lectura (altamente recomendado)

HUIWEN_ORACLE_MODE

thin (12c+) / thick (11g/10g requiere Instant Client)

HUIWEN_ORACLE_CLIENT_LIB_DIR

Directorio de Instant Client para modo thick

HUIWEN_ORACLE_READ_ONLY

Restricción semántica de solo lectura (predeterminado true)

HUIWEN_ORACLE_POOL_MIN/MAX

Tamaño del pool de conexiones

Seguridad

Variable

Descripción

HUIWEN_AUTH_ENABLED

Si se habilita la autenticación Bearer (obligatorio en producción)

HUIWEN_AUTH_BEARER_TOKEN

Token Bearer estático

HUIWEN_AUTH_ADMIN_TOKENS

Tokens de administrador separados por comas (para herramientas de lector/exportación de escritura)

HUIWEN_RATE_LIMIT_ENABLED / _RPS / _BURST

Limitación de velocidad con cubo de tokens


Lista de herramientas

Herramienta

Descripción

Requiere token

search_books

Búsqueda en catálogo (campo / clasificación China / ubicación / filtro de disponibles / ordenación / paginación)

—

get_book_detail

Información completa de un libro (incluye todos los ejemplares y estadísticas de circulación)

—

get_availability

Consulta de disponibilidad de ejemplares por ISBN / código de barras / título

—

get_hot_books

Ranking de préstamos populares (filtrable por clase de la Clasificación China)

—

get_new_arrivals

Nuevas adquisiciones de los últimos N días

—

browse_classification

Navegación por clasificación China / conteo en tiempo real de prefijo

—

union_search

Búsqueda de solo lectura en catálogo colectivo entre bibliotecas (desactivado por defecto)

Configuración

get_statistics

Estadísticas de fondos (total / por ubicación / por clasificación)

—

get_reader_borrowing

Préstamos actuales del lector

admin

get_reader_history

Historial de préstamos del lector

admin

get_reader_fines

Deudas del lector

admin

get_system_status

Estado de la fuente de datos y del servicio

—

Para la descripción de funciones y evaluación de integración de la interfaz de servicio ACS/SIP2 de Huiwen, ver docs/descripción-interfaz-ACS-SIP2-Huiwen-y-evaluación-integración.md (mapeo autorizado de campos, subconjunto candidato de solo lectura, elementos explícitamente deshabilitados).

Las herramientas de lector están desensibilizadas por defecto (include_pii=false no devuelve número de identificación / contacto, etc.; true requiere admin).


Ejemplos de integración de clientes

Claude Desktop / Clientes de escritorio compatibles con MCP

{
  "mcpServers": {
    "huiwen": {
      "command": "/path/to/uv",
      "args": ["--directory", "/path/to/huiwen-mcp", "run", "huiwen-mcp"],
      "env": { "HUIWEN_DATA_SOURCE": "demo" }
    }
  }
}

HTTP remoto (requiere autenticación propia en la puerta de enlace)

HUIWEN_TRANSPORT=http HUIWEN_HOST=0.0.0.0 HUIWEN_PORT=8765 uv run huiwen-mcp

El cliente se conecta a http://<host>:8765/mcp/ (Streamable HTTP) usando ${MCP_SERVER_URL}. Cuando HUIWEN_AUTH_ENABLED=true, el token se pasa como parámetro de herramienta token con cada llamada; la cabecera HTTP Authorization no es consumida por el servidor (ver guía de despliegue §3.2).


Casos de uso

Objeto

Escenario

Lector

“¿Hay ‘El problema de los tres cuerpos’? ¿En qué piso? ¿Cuántos disponibles? ¿Populares cerca?” — buscar libros / preparar exámenes / estudiar en un solo paso

Bibliotecario de referencia

Consulta automática de catálogo/ejemplares → generar borrador de respuesta → verificación manual (modo Copilot)

Bibliotecario de materia

Bibliografía temática, estadísticas de soporte documental, informes de recomendación de compras por departamento

Adquisiciones/catalogación

Verificación de duplicados por ISBN, análisis de falta de fondos, notificación de nuevas adquisiciones, verificación de metadatos

Dirección de biblioteca

Gráficos de estadísticas de fondos/circulación, informes semanales de datos

Portal de biblioteca con IA

Como capa de datos central para preguntas y respuestas inteligentes / recomendación inteligente de libros

Construcción de alianza

Búsqueda conjunta entre bibliotecas (falta de fondos → buscar libro en alianza → solicitar préstamo interbibliotecario formal)

Recomendaciones completas (incluyendo esquema jerárquico con LLM local + RAG y comparación nacional e internacional) en docs/recomendaciones-de-servicio-y-aplicación.md.


Seguridad y cumplimiento

  1. Solo lectura por defecto: todas las herramientas son de solo lectura; las operaciones de escritura (renovación/reserva/pedido interbibliotecario) no se implementan intencionadamente.

  2. SQL de lista blanca: el backend Oracle solo ejecuta el conjunto cerrado de SQL parametrizado en db/queries.py, sin SQL libre.

  3. Control de extremo a extremo: autenticación → limitación de velocidad → control de lector/PII → auditoría (JSONL). Los datos personales del lector requieren token de administrador y están desensibilizados por defecto.

  4. Contrato de autenticación (verificado con pruebas reales): el token se pasa a través del parámetro de herramienta token (parámetro opcional de cada herramienta, _guard lo extrae de los parámetros y lo compara con HUIWEN_AUTH_BEARER_TOKEN), no se implementa la transmisión de la cabecera HTTP Authorization — la capa de transporte TLS/identidad unificada es responsabilidad del proxy inverso de la puerta de enlace, la autenticación de huiwen-mcp es la segunda línea de defensa detrás de la puerta de enlace. El token no se escribe en el registro de auditoría (_guard lo extrae antes de registrar).

  5. Las claves no entran en el repositorio: DSN/contraseñas/JWT/direcciones de sitio solo a través de variables de entorno o config.local.json (git-ignored). El repositorio no contiene ningún dato de despliegue real (ver NOTICE).

  6. Cuidado con servicios externos: la alianza PROCAT es un sistema multiusuario de terceros, desactivado por defecto; antes de activarlo, confirmar la autorización con la alianza/proveedor de servicios. OPAC es cerrado, históricamente ha tenido vulnerabilidades públicas, el adaptador solo usa parámetros de lista blanca.

  7. Reporte y manejo de vulnerabilidades en SECURITY.md.


Pruebas

Archivo

Contenido

Ejecución

tests/smoke_demo.py

Prueba de humo del backend demo (sin conexión)

uv run python tests/smoke_demo.py

tests/test_stdio.py

Regresión de integración/autenticación stdio (demo)

uv run python tests/test_stdio.py

tests/test_oracle_live.py

Integración con base de datos real (desactivado por defecto)

HUIWEN_LIVE_ORACLE=1 ...

tests/test_union_live.py

Sitio real de la alianza PROCAT (desactivado por defecto)

HUIWEN_LIVE_UNION=1 ...

Las pruebas con base de datos real/sitio real están desactivadas por defecto (requieren establecer explícitamente HUIWEN_LIVE_* localmente) para evitar tocar cualquier sistema real. La imagen Docker no se construye/publica por defecto (la política de publicación es “solo publicar código fuente y documentación”): si se necesita la imagen, construirla localmente con docker build (para modo Oracle thick, añadir --build-arg WITH_INSTANT_CLIENT=true).


Estructura del proyecto

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.toml

Hoja de ruta

  • Fase 1: MCP de solo lectura (tres backends: demo + opac + oracle)

  • Fase 2: Integración con bases de datos reales OPAC/Oracle, integración con catálogo colectivo de la alianza (contrato verificado + esquema de token)

  • Resto de Fase 2: Imagen Docker (no root, reproducible) + guía de despliegue (incluyendo plantilla de autenticación a nivel de proxy inverso)

  • Publicado: etiqueta v1.0.0 + GitHub Release (código fuente y documentación; sin CI/workflows, la imagen Docker no se construye automáticamente)

  • Integración de puerta de enlace OAuth2/JWT con CAS del campus / ventanilla única (plantilla lista, requiere configuración in situ)

  • Candidato Fase 2.5/3: Subconjunto de solo lectura de ACS/SIP2 de Huiwen (evaluación en docs/descripción-interfaz-ACS-SIP2-Huiwen-y-evaluación-integración.md)

  • Fase 3: Base de datos vectorial RAG + LLM local para recomendación inteligente de libros / consulta de referencia (ver docs/recomendaciones-de-servicio-y-aplicación.md)

  • Fase 4: Integración con OpenAPI de la nueva plataforma Huiwen


Licencia y cumplimiento (Open Source & Compliance)

Sugerencia de versión de licencia

Este proyecto recomienda adoptar Apache License 2.0 (el repositorio ya incluye el LICENSE completo):

  1. Permisivo: permite que universidades, fabricantes y plataformas en la nube utilicen, modifiquen y redistribuyan libremente (incluido uso comercial), siempre que se conserve el aviso de derechos de autor y licencia, lo que favorece la adopción por parte de cadenas de herramientas de IA y sistemas de terceros.

  2. Licencia de patentes: Apache-2.0 otorga explícitamente una licencia de uso de patentes a los contribuyentes (artículo 3), lo que resulta más claro y "resistente a demandas" cuando múltiples instituciones o partes (como universidades y fabricantes tecnológicos) contribuyen conjuntamente.

  3. Cláusulas estandarizadas para contribuyentes: otorga implícitamente una licencia al proyecto (artículo 5, Concesión de contribuciones), eliminando la carga de que cada contribuyente firme un CLA individual, en línea con las prácticas de proyectos públicos en GitHub.

  4. Diferenciación: en comparación con MIT, Apache-2.0 es más adecuado para proyectos de infraestructura publicados formalmente por instituciones y que pueden ser mantenidos a largo plazo por múltiples partes.

Si su institución prefiere un "estilo minimalista", puede volver a MIT en cualquier momento: solo necesita reemplazar el contenido completo de LICENSE, cambiar license en pyproject.toml a { text = "MIT" }, y actualizar esta sección en el README.

Declaración de cumplimiento (importante)

  • No contiene código fuente de terceros/fabricantes: este proyecto es una capa de interoperabilidad independiente para el sistema cerrado Huiwen/Libsys, y no incluye ningún código propietario de Huiwen o de las entidades de la alianza; los contratos de OPAC/alianza se basan únicamente en los protocolos de páginas web públicas y los registros de respuesta del sitio real. Consulte NOTICE para más detalles.

  • No se publican datos sensibles de despliegue junto con el repositorio: DSN reales, contraseñas de cuentas, instancias de inicio de sesión de OPAC, JWT de la alianza, PII de lectores, ni SECRET_KEY de fabricantes están presentes en el repositorio (SECURITY.md/CONTRIBUTING.md ya establecen líneas rojas, prohibiendo estrictamente la inclusión de cualquier dato sospechoso de ser sensible).

  • Marcas registradas: Huiwen, Libsys y OPAC son marcas comerciales/nombres de productos de Jiangsu Huiwen Software y otros titulares de derechos; este repositorio solo los utiliza para referencias de interoperabilidad, sin implicar respaldo ni afiliación.

  • Antes de utilizar este software, confirme los derechos de uso y límites con Huiwen Software, el proveedor de servicios de la alianza y el centro de información de su institución.


Solución de problemas

Síntoma

Solución

"Este backend no es compatible"

Verifique HUIWEN_DATA_SOURCE; union_search solo funciona con el backend opac y requiere configuración de la alianza

Oracle DPY-3010 / fallo de conexión

Para Oracle 11g, use HUIWEN_ORACLE_MODE=thick + HUIWEN_ORACLE_CLIENT_LIB_DIR (Instant Client)

Tiempo de espera agotado en búsqueda OPAC

El sitio puede ser lento (15-40 s común), aumente HUIWEN_OPAC_TIMEOUT o reintente más tarde

union_search devuelve enabled:false

La alianza no está habilitada o falta el token → habilite la configuración y complete el JWT

La alianza devuelve storage token not found

El JWT ha expirado → vuelva a iniciar sesión en OPAC, obtenga getReaderJwt y actualice el token

El marco rechaza el registro de herramientas (*args/**kwargs)

Las funciones de herramienta deben tener parámetros explícitos; no use la firma *args/**kwargs

La herramienta de lectores devuelve "se requiere token de administrador"

Use un token de HUIWEN_AUTH_ADMIN_TOKENS

Available Tools

12 tools
browse_classificationB

中图法分类浏览:传入分类号前缀(如 'T')返回该类目馆藏统计。

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNo
prefixNo分类号前缀;为空返回各大类

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states that the tool returns collection statistics, without confirming it is read-only, safe, or clarifying any side effects, auth requirements, or error handling. This is insufficient for a tool with no annotations.

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?

The description is a single short sentence, which is concise and front-loaded. However, it could be more structured by explicitly listing the parameters or adding a brief usage note. It is efficient but not maximally informative.

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 an output schema exists, so the description does not need to explain return values. However, the description omits the token parameter entirely and lacks usage guidelines, making it incomplete for an agent to fully understand the tool's capabilities. It provides the core purpose but not enough context for correct invocation in all scenarios.

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?

The schema description coverage is 50% (only prefix has a description). The tool description adds a concrete example for prefix ('如 'T'') and rephrases the schema description, but it does not explain the token parameter at all. While the example adds value, the missing token documentation leaves a gap.

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

Purpose5/5

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

The description clearly states the verb 'browse' (浏览) and resource 'Chinese Library Classification' (中图法分类), with the specific action of passing a classification prefix and returning collection statistics. It distinguishes itself from sibling tools like search_books and get_book_detail by focusing on classification-based browsing.

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?

The description implies when to use the tool: when you have a classification prefix to browse. However, it does not explicitly state when not to use it or provide alternatives, such as using search_books for keyword searches. The context of sibling tools provides some implicit guidance, but the description lacks direct usage instructions.

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

get_availabilityA

按 ISBN / 条码 / 题名查询馆藏复本在馆(可借)状态。

ParametersJSON Schema
NameRequiredDescriptionDefault
isbnNoISBN 号(优先)
titleNo题名(demo 后端支持;oracle 后端请用 search_books)
tokenNo
barcodeNo条码号(优先于 isbn 匹配)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It conveys the tool is a read-only query for availability, which is reasonable. However, it does not disclose details such as whether it returns full availability per branch, pagination behavior, or rate limiting. With no annotations, more transparency would be beneficial.

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?

The description is a single, concise sentence that front-loads the core purpose. It uses common separators (slashes) to list alternatives clearly. Every word contributes meaning without redundancy.

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?

Given the tool has moderate complexity (4 params, 0 required) and an output schema exists (agents can infer return format from there), the description adequately covers the core purpose. It does not explain the token parameter or the exact response structure, but the output schema compensates. Minor gap is the lack of hint about how multiple search criteria interact (e.g., AND vs OR).

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 description coverage is high at 75%, so the schema already documents ISBN, title, and barcode semantics well. The description repeats the search fields but adds no additional parameter-level guidance beyond what the schema provides. The token parameter's role remains unclear from both schema and description, preventing a higher score.

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

Purpose5/5

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

The description clearly states this tool queries library copy availability by ISBN, barcode, or title. It uses a specific verb-resource combination ('查询馆藏复本在馆状态') that distinguishes it from siblings like search_books or get_book_detail.

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

Usage Guidelines4/5

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

The description implies usage context—to check availability—and the input schema provides a hint that for title queries with an Oracle backend, search_books should be used instead. However, there is no explicit when-to-use vs. when-not-to-use guidance for ISBN or barcode searches versus other tools.

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

get_book_detailA

获取单册书目完整信息(含全部馆藏复本状态与流通统计)。

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNo
marc_noYesMARC 记录号(search_books 结果中的 marc_no)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are present, so the description carries full burden. It states data retrieval but does not disclose whether this is a read-only operation, any authentication requirements, rate limits, or side effects. The behavioral disclosure is minimal and relies on inference.

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?

The description is a single, front-loaded sentence with zero waste. Every part contributes to defining the tool's purpose and key outputs.

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?

Given the presence of an output schema and the tool's focused purpose (retrieve single book details with copy status and circulation), the description is largely complete. It could benefit from including when to use and behavioral notes, but is still adequate.

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 50% (one param documented, one not). The description adds no explanation for the undocumented 'token' parameter and does not elaborate on parameter semantics beyond what the schema provides. It does not compensate for the gap.

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

Purpose5/5

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

The description clearly specifies the verb (获取/get), the resource (单册书目完整信息/complete information of a single book), and explicitly lists included data (馆藏复本状态与流通统计). This uniquely distinguishes it from sibling tools like search_books, get_availability, and get_statistics.

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?

The description implies usage when complete single-book info with copy status and circulation is needed, but provides no explicit guidance on when to use this tool vs alternatives, nor any prerequisites or exclusions.

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

get_hot_booksA

热门借阅图书排行(可按中图法大类过滤)。

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNo
top_nNo返回条数(<=50)
cls_noNo中图法分类号前缀(如 'I')
periodNototal|yeartotal

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not mention side effects, authentication needs, rate limits, data freshness, or pagination behavior. The token parameter is left unexplained, and the description assumes a read-only ranking but does not explicitly confirm safety or data source.

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?

The description is a single, concise Chinese sentence that states the core function and filtering capability. It is front-loaded with the key purpose and has zero wasted words, making it easy for an agent to parse quickly.

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?

Given the presence of an output schema (which presumably defines the return format), a simple parameter list with defaults, and a straightforward ranking task, the description covers the essential use case. However, it omits details like output ordering, how 'hot' is determined, and token handling, but the output schema may address some of this. It is nearly complete for a tool of this complexity.

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 description coverage is 75% with top_n, cls_no, and period having Chinese descriptions that specify constraints (≤50, prefix, total/year). The description adds minimal extra value beyond the schema by mentioning classification filtering, but token remains undocumented. Baseline is 3 due to high coverage, and no substantial semantic enrichment is provided.

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

Purpose5/5

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

The description clearly states the tool's purpose: retrieving a ranking of hot borrowed books ('热门借阅图书排行') with optional filtering by Chinese library classification ('可按中图法大类过滤'). This directly distinguishes it from siblings like search_books (general search), get_new_arrivals (new arrivals), and browse_classification (browsing taxonomy) by focusing on popularity ranking.

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?

The description implies the tool is for obtaining a hot borrowing list with optional classification filtering, but it provides no explicit guidance on when to use it versus alternatives like search_books or get_statistics. There is no mention of prerequisites, auth requirements (despite the token parameter), or when not to use this tool.

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

get_new_arrivalsC

近 N 天新书通报。

ParametersJSON Schema
NameRequiredDescriptionDefault
clcNo中图法分类号前缀过滤
daysNo时间范围(天)
tokenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are present, so the description must fully disclose behavioral traits. The one-sentence description only states the tool's purpose; it does not mention whether it is a read-only operation, pagination, authentication requirements, or any side effects. This is insufficient for an agent to understand behavior.

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?

The description is extremely concise (one sentence), which is efficient but lacks essential details. It is not structured with front-loading or bullet points. While brevity is valued, it sacrifices clarity and completeness.

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?

Despite the presence of an output schema, the description is too minimal to provide complete context. It does not explain what the output represents, how the parameters modify behavior, or any edge cases. For a tool with three parameters and no annotations, the description is insufficient.

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?

The description adds no information about the three parameters. Although schema coverage is 67% (two parameters have descriptions in the schema), the tool description does not explain how 'clc' or 'days' affect results, and the 'token' parameter remains undocumented. The description fails to compensate for the missing schema description.

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?

The description '近 N 天新书通报' (new book announcements for the last N days) clearly indicates the tool retrieves recently added books. The verb 'get' is implied by the name, and the resource is 'new arrivals'. While it is distinct from siblings like search_books or get_hot_books, it does not explicitly differentiate its scope or usage.

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 is provided on when to use this tool versus alternatives. The description does not mention prerequisites, context, or exclusions (e.g., when to use search_books instead). An agent has no information about the appropriate use case.

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

get_reader_borrowingA

读者当前借阅(需 admin 认证令牌)。

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNo
cert_idYes读者证件号 CERT_ID
include_piiNo是否返回实名(默认脱敏/隐藏)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It mentions the admin token requirement but fails to describe the response format, rate limits, or data privacy implications (e.g., the 'include_pii' parameter suggests sensitive data handling). With no annotations, crucial behavioral details like read-only nature or possible errors are missing.

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?

The description is very concise (one short sentence) with no redundancy. It front-loads the core purpose ('读者当前借阅') and adds the critical auth requirement. However, it could be slightly more structured (e.g., separated into purpose and usage note) without losing brevity.

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?

Given the tool has 3 parameters (with 67% schema coverage), an output schema, and a clear sibling set, the description adequately signals the core function and auth need. However, it doesn't explain the return format or what happens when the token is missing, but the output schema likely covers return values. The complexity is moderate, and the description almost fully compensates for missing annotations.

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?

Schema coverage is 67% (2 of 3 parameters have descriptions: 'cert_id' is described as '读者证件号 CERT_ID', and 'include_pii' has a clear explanation). The description adds context about the token being an admin auth requirement, which complements the schema. The 'include_pii' parameter's description in the schema is already informative, and the tool name implies purpose, so the remaining gap is minimal.

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

Purpose5/5

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

The description explicitly states '读者当前借阅' (reader's current borrowing) with the specific verb 'get' implied by the tool name and '需 admin 认证令牌' (requires admin auth token). It clearly distinguishes from siblings like 'get_reader_history' (historical borrowing) and 'get_reader_fines' (fines), making it unique among reader-related tools.

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

Usage Guidelines4/5

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

The description mentions the need for an admin token and implies this is for current borrowing status. However, it does not explicitly exclude when to use alternatives like 'get_reader_history' for past records, nor does it provide clear context on prerequisites beyond the token. Still, the admin token requirement is a strong usage signal that helps the agent decide when to invoke this tool.

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

get_reader_finesB

读者欠款 / 罚款明细(需 admin 认证令牌)。

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNo
cert_idYes读者证件号 CERT_ID
include_piiNo是否返回实名(默认脱敏/隐藏)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description must fully disclose behavioral traits. It mentions the need for an admin token, which hints at security/permission behavior. It does not disclose whether the operation is read-only, destructive, or has side effects. The parameter include_pii with default false suggests privacy behavior (data masking), but this is not explained in the description. With no annotations, a score of 3 reflects partial disclosure.

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?

The description is extremely concise (one short sentence in Chinese with a parenthetical note). It front-loads the core purpose and an important constraint. It could be slightly more structured or include an English explanation, but for a bilingual context it is efficient.

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?

Given the tool has an output schema (so return values don't need explaining), 3 parameters, and no annotations, the description covers the core purpose and one critical constraint (admin token). It does not explain why include_pii exists or how to handle errors, but with the output schema and moderate complexity, this is reasonably complete.

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?

Schema description coverage is 67% (2 out of 3 parameters documented: cert_id and include_pii). The description adds value beyond the schema by stating '需 admin 认证令牌' which implies the token parameter must be supplied with an admin-level token. It does not describe cert_id semantics further, but the schema already does that. The missing parameter (token) is implicitly addressed by the authentication hint in the description.

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?

The description uses Chinese to state '读者欠款 / 罚款明细' meaning 'reader fines/fee details', which clearly indicates retrieving fine details for a reader. This distinguishes the tool from siblings like get_reader_borrowing (borrowing records) and get_reader_history (reading history). However, the verb is implicit, so it is not a perfect 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?

The description adds '需 admin 认证令牌' meaning 'requires admin authentication token', which implies when to use the tool (must have admin rights). However, it provides no guidance on when not to use this tool or how it compares to siblings like get_statistics or union_search. The only usage hint is the authentication requirement, which is insufficient for an agent deciding among 12 sibling tools.

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

get_reader_historyC

读者借阅历史(需 admin 认证令牌)。

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNo
cert_idYes读者证件号 CERT_ID
include_piiNo是否返回实名(默认脱敏/隐藏)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility. It states 'requires admin authentication token' but does not disclose whether the tool is read-only, what data it returns (history, pagination, etc.), or any potential side effects. This is insufficient for safe agent invocation.

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?

The description is a single, front-loaded sentence. It conveys purpose and the critical admin requirement without wasted words. However, it is extremely brief, bordering on under specification, which reduces the score from 5.

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?

Despite having 3 parameters, an output schema, and no annotations, the description only covers purpose and auth. It omits usage context, parameter guidance, and behavioral traits like read-only nature. For a tool with moderate complexity, this is incomplete.

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 coverage is 67% (2 of 3 parameters have descriptions in the schema). The description adds no parameter information, such as explaining what cert_id represents or when include_pii should be true. Given moderate coverage, the description should at least echo parameter roles, which it fails to do.

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?

The description '读者借阅历史' clearly identifies the tool as retrieving a reader's borrowing history. It includes the admin authentication requirement, adding specificity. However, it does not explicitly distinguish from sibling get_reader_borrowing, which likely handles current borrows. The Chinese-only phrasing may limit understanding for non-Chinese agents, but the purpose is unambiguous.

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 siblings like get_reader_borrowing or get_reader_fines. The only usage hint is the admin auth requirement, which is a prerequisite, not a selection criterion. An agent would need to infer from the name alone.

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

get_statisticsD

馆藏统计。

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNo
metricNototal(总数)| by_location(按馆藏地)| by_clc(按分类)total
range_descNo统计时间范围描述(如 '2026')

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

D1.7/5.0
Behavior1/5

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

No annotations are present, so the description carries the full burden of behavioral disclosure. It does not state whether the tool is read-only, requires authentication, has rate limits, or any side effects. The single phrase offers no transparency beyond a vague topic.

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

Conciseness2/5

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

The description is extremely short (four characters) but under-specified. It does not earn its place because it provides almost no useful information. True conciseness requires meaningful content, not mere brevity.

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

Completeness1/5

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

Given the tool has three parameters, an output schema, and multiple sibling tools, the description is grossly incomplete. It does not explain the return structure, parameter usage, or how to interpret the output. The agent cannot infer proper usage from this description alone.

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?

The description adds no meaning beyond the input schema. The schema already describes two of three parameters (metric and range_desc) with explicit options; the description does not summarize or clarify them. The token parameter lacks a schema description and the tool description does not help either. With 67% schema coverage, the description should compensate but fails to do so.

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

Purpose2/5

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

The description '馆藏统计' (collection statistics) gives a vague sense of the tool's domain but lacks a specific verb or action. It does not clarify what the tool returns or how it differs from sibling tools like search_books or get_availability. The purpose is only marginally clearer than the tool name itself.

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 is provided on when to use this tool versus alternatives. There is no mention of context, prerequisites, or when not to use it. The description does not hint at any selective use cases, leaving the agent without decision support.

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

get_system_statusB

返回当前数据源与后端健康状态。

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states that it returns health status, but does not mention whether the optional token parameter is used for authentication, whether any side effects exist, or how health is determined. The behavior remains largely opaque beyond the basic return.

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?

The description is a single, front-loaded sentence with no filler, stating the core purpose efficiently. It is appropriately sized for a simple status tool, though it omits some detail. The structure is clean and direct.

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?

Despite the simplicity of the tool (one optional parameter, output schema present), the description is incomplete because it fails to explain the token parameter and provides no behavioral context. The output schema mitigates return-format uncertainty, but the agent lacks enough information to confidently invoke the tool correctly.

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

Parameters1/5

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

The input schema description coverage is 0%, and the description does not mention the 'token' parameter at all. The schema shows it is an optional string or null, but its purpose (e.g., authentication, context) is completely unexplained, leaving the agent to guess how to use it.

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

Purpose5/5

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

The description '返回当前数据源与后端健康状态。' clearly states a specific verb ('返回' = returns) and resource ('数据源与后端健康状态' = data source and backend health status). This distinct purpose sets it apart from sibling tools like search_books and get_book_detail, which are book-related queries.

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?

No explicit usage guidance or alternatives are provided. The purpose implies a system health check, and sibling tools are all book-related, which makes the intended usage inferable, but the description does not state when to use this tool (e.g., 'to verify backend health') or contrast it with alternatives.

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

search_booksB

检索馆藏书目。返回题名/责任者/出版社/ISBN/馆藏地在馆信息列表。

ParametersJSON Schema
NameRequiredDescriptionDefault
clcNo中图法分类号前缀(如 'T'、'TP')
pageNo
sortNorelevance|circulation|daterelevance
fieldNoany|title|author|subject|publisher|isbn|callno|yearany
queryYes检索词
tokenNo
locationNo馆藏地代码
page_sizeNo
pub_year_maxNo
pub_year_minNo
in_library_onlyNo是否只返回有在馆复本的图书

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states 'search' and lists output fields, which implies a read-only operation but does not explicitly declare it. It does not mention authentication requirements, rate limits, side effects, or any constraints. For a search tool with 11 parameters, this is insufficient transparency.

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?

The description is extremely concise: two sentences. The first sentence states the primary action, and the second lists the returned fields. Every word is functional, and the structure is front-loaded. There is no redundancy or filler.

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?

Given the tool has 11 parameters, an output schema exists, and there are 12 sibling tools, the description is too minimal. It does not explain pagination, field-specific search, date filtering, location filtering, or the token parameter. The agent would lack essential context to use the tool effectively, especially for non-trivial queries.

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?

The description adds no information about any of the 11 parameters. Schema coverage is 55% (6 parameters have descriptions in the schema), but the description does not compensate for the 5 parameters without descriptions (page, page_size, pub_year_min, pub_year_max, token). It also does not explain how the query parameter is interpreted (e.g., keyword matching, Boolean operators). The output description is helpful but does not aid parameter usage.

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

Purpose5/5

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

The description clearly states the tool's core function: searching the library catalog and returning a list of specific fields (title, author, publisher, ISBN, location, availability). The verb '检索' (search) is specific and the resource '馆藏书目' (library catalog) is well-defined. While it does not explicitly distinguish from siblings, the sibling tools are mostly specialized (detail, availability, hot, new, classification), making this the general search tool.

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?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any prerequisites, exclusions, or specific contexts. With 12 sibling tools including get_book_detail, browse_classification, and union_search, the lack of differentiation or usage hints leaves the agent to infer usage from the name alone.

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. 12 tool updatesv0.1.0
    • First observedbrowse_classification
    • First observedget_availability
    • First observedget_book_detail
    • First observedget_hot_books
    • First observedget_new_arrivals
    • First observedget_reader_borrowing
    • First observedget_reader_fines
    • First observedget_reader_history
    • First observedget_statistics
    • First observedget_system_status
    • First observedsearch_books
    • First observedunion_search

TDQS

B3.2/5.0

Scored across 12 tools

Disambiguation4/5

Most tools have clearly distinct purposes: book searching, detail retrieval, availability checking, hot books, new arrivals, classification browsing, statistics, system status, union search, and reader-specific operations. However, get_reader_borrowing, get_reader_history, and get_reader_fines all relate to reader accounts and could be conflated if descriptions were less precise, but their names clearly differentiate them.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case: search_books, get_book_detail, get_hot_books, etc. The pattern is predictable and makes the toolset easy to navigate.

Tool Count5/5

With 12 tools, the count is well within the ideal range. The toolset covers public catalog operations, reader management, and system administration without being excessive or minimal.

Completeness3/5

The toolset provides comprehensive read-only access to library catalog and reader information. However, it is explicitly limited to read-only operations, lacking any write capabilities (e.g., placing holds, renewing items) which are natural expectations for a library system. The union_search tool's description also notes it does not implement interlibrary loan ordering, which is a gap.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Read-only MCP server that connects AI clients to Crescender's school asset, loan, member, and asset-comms API.
    6
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Read-only MCP server that lets AI clients query DMS repositories through a local bridge, supporting tools for health checks, listing connections and items, retrieving item info, and reading documents. Credentials are handled securely via a separate broker.
    7
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Read-only MCP server for AI clients to browse and search project files securely, with configurable permissions, virtual paths, and key-based access.
    -
  • F
    license
    B
    quality
    C
    maintenance
    A secure, read-only MCP server that enables AI assistants to inspect transactions, vendor performance, wallet balances, and analytics through validated REST API calls.
    19
    -