huiwen-mcp
huiwen-mcp
汇文図書管理システム(Libsys / OPAC)の Model Context Protocol (MCP) サーバー —— AI 向けの図書館読み取り専用データゲートウェイ:Claude / Cherry Studio / DeepSeek などの AI クライアントが 安全かつ監査可能な形で蔵書書誌、複本の在館状況、流通統計、連合共同目録を検索できるようにします。
大学図書館側が開発した公式アダプタ層であり、デフォルト読み取り専用、最小権限、全リンク監査のセキュリティベースラインに従います。
プロトコル:Model Context Protocol(Anthropic オープンスタンダード、Yale Library の目録連携と同じ技術路線)
ランタイム:Python ≥ 3.10 · FastMCP 3.x
データソース:
demo(依存関係不要のデモ)/opac(汇文 OPAC 公開ウェブプロトコル)/oracle(汇文 Libsys データベース読み取り専用直接接続)ライセンス:Apache-2.0(推奨方式、ライセンスとコンプライアンス 参照)
目次
Related MCP server: dms-mcp-server
機能特性
能力 | 説明 |
🔍 蔵書検索 | 複数フィールド / 中国図書館分類法 / 所蔵場所 / 在館フィルタ / 並び替え / ページネーション |
📚 書誌詳細 | 単一冊子の完全書誌、全所蔵複本の状態と流通統計 |
✅ 複本在館 | ISBN / バーコード / タイトルで貸出可能状態を素早く確認 |
🔥 人気&新着 | 人気貸出ランキング、直近 N 日の新着案内 |
🧭 分類ブラウズ | 中国図書館分類法の分類/プレフィックスごとのリアルタイムヒット数 |
📊 統計 | 蔵書総数 / 所蔵場所別 / 分類別 |
🤝 連合共同目録 | PROCAT 機関横断共同検索(オプション、デフォルト OFF、JWT 認証) |
👤 利用者データ(admin) | 貸出中 / 貸出履歴 / 延滞金(PII はデフォルトでマスク) |
🛡️ セキュリティ | 認証→レート制限→PII/利用者ゲート→JSONL 監査;デフォルト読み取り専用 |
🔌 トランスポート | stdio(プロセス内) / Streamable HTTP(サービス化) |
🐳 デプロイ | Docker イメージ(非 root、再現可能なビルド);本番/ゲートウェイレベルの認証方式は |
🧩 データソースプラグイン可能 |
|
設計のトレードオフ:書き込み操作(延長、予約、ILL 発注)は意図的に未実装——本プロジェクトは 「安全に監査可能な読み取り」のみを行い、書き込み経路はすべて元の業務システムと手動作業に委ねます。
システム設計の考え方
位置づけ:データゲートウェイ / スキル層、データベースプロキシではない
AI クライアント(大規模言語モデル)は決して汇文データベースに直接接続しません。すべてのクエリは制御されたツールラッパー層を経由します:
┌─────────────── 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:内置样例数据 → 离线演示/测试 │
└───────────────────────────────────────────────────────────────────────────────────────┘各層の責務は単一:アダプタはデータ取得のみ;
_guardはセキュリティのみ;監査は独立して JSONL に記録; 上位の AI はツールシグネチャとのみ対話し、バックエンドの違いを認識しません(3 バックエンドで同一シグネチャ)。デフォルトで安全:
data_source=demoで依存関係なく実行可能;opac/oracleは明示的な設定が必要; 利用者機密ツールには admin トークンが必要; 書き込み操作はデフォルトで無効;外部連合サービスはデフォルトでオフ。
なぜ MCP を選んだか
MCP は AI が「データベース/業務システム」に接続するためのオープンスタンダードです(Anthropic 2024-11 発表、エコシステムには GitHub/クラウドベンダー/データベースベンダーが参加)。プライベート API ではなくオープンスタンダードを選択することで、以下を保証します:クライアントの交換可能性 (Claude/Cherry Studio/DeepSeek/自製 Agent)、サービスの複数システムでの再利用、長期にわたるベンダーロックインの回避—— これは Yale Library が MCP で目録に接続したのと同じ路線です。
FastMCP はサーバー実装に stdio / HTTP の二重トランスポートを提供し、単一のコードベースでプロセス内と サービス化デプロイの両方をサポートします。
トランスポートモードの選択:stdio vs HTTP
stdio:クライアント起動時にプロセス内で起動、運用不要・レイテンシ最小、個人/スタンドアロンでの AI デスクトップクライアント連携に最適。
HTTP(Streamable HTTP):独立サービス、複数ユーザー/集中デプロイに最適;前面に OAuth2/JWT リバースプロキシと学内統一認証を配置し、集中監査が可能。
実装技術方式
注目点 | 方式 |
MCP サーバー |
|
ツールシグネチャの厳格な制約 | FastMCP 3.x は |
認証チェーン |
|
Oracle バックエンド |
|
OPAC バックエンド | ホワイトリストパラメータで汇文公開ウェブプロトコル( |
連合共同目録 |
|
設定 |
|
モデル |
|
重要な契約(すべて実測確認済み)
OPAC:検索結果
<ol id="search_book_list">→<li class="book_list_info">、 タイトル/請求記号/所蔵複本数/貸出可能複本数/ヒット数;詳細ページの複本テーブル;人気ランキング。連合 PROCAT:
POST(GET→405);認証はクエリパラメータtk=(JWT は OPAC 利用者セッションgetReaderJwtが発行);items[].logic="1"(AND)/"2"(OR);フィールドマッピングany/title/author/subject/isbn/clcNumber/publisher/series。詳細はdocs/連合共同目録検索.md参照。
⚠️ OPAC / 連合はともにベンダーの非公開またはサードパーティシステムであり、契約はデプロイバージョンによって変化する可能性があります。すべての連携 ドキュメントは「実サイトでの確認」を基準とし、
tests/test_*_live.pyで検証を記録します。
クイックスタート
1) インストール
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) ゼロ設定で実行(demo データソース、オフライン)
HUIWEN_DATA_SOURCE=demo uv run huiwen-mcp # stdio 模式
HUIWEN_DATA_SOURCE=demo HUIWEN_TRANSPORT=http uv run huiwen-mcp # HTTP 模式demo にはサンプル書誌/利用者データが組み込まれており、スモークテスト、テスト、連携教育に使用できます。
2b) Docker ワンクリックデプロイ
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詳細(Oracle 11g thick / compose / リバースプロキシレベルの認証と学内 CAS 連携)は docs/デプロイガイド.md を参照。
3) 実データソース(opac / oracle)への接続
.env.example を .env にコピーして記入(.env は git-ignore されています):
cp .env.example .env
# 编辑 .env:设置 HUIWEN_DATA_SOURCE 与对应凭据
HUIWEN_DATA_SOURCE=opac
HUIWEN_OPAC_BASE_URL=https://opac.example.edu.cn # 你们学校 OPAC 地址または config.local.json を使用(機密設定は自動ロード、リポジトリにコミットされません)。
設定(環境変数 / .env)
すべての設定は環境変数(接頭辞 HUIWEN_)で注入可能で、.env ファイル(自動ロード)もサポートします。
優先順位:環境変数 > 明示的な config.json / CONFIG_PATH > config.local.json 自動マージ > 組み込みデフォルト。
共通
変数 | 説明 | デフォルト |
|
|
|
|
|
|
| HTTP リスニング |
|
| 利用者機密フィールドを出力するか(admin が必要) |
|
| JSONL 監査ログのパス(空欄で無効) | 空 |
| ローカル機密設定ファイル名 |
|
OPAC
変数 | 説明 | |
| 汇文 OPAC ルート URL | |
| 検索タイムアウト(リサイクルステーションは 15-40s と遅いため余裕を持つ) | 25s |
| 利用者ログイン後の個人データを許可するか(デフォルト OFF) | |
| 連合共同目録スイッチ(デフォルト OFF) | |
| 連合サービス URL | |
| テナントコード | |
| 利用者セッション JWT( |
Oracle
変数 | 説明 |
|
|
| 読み取り専用アカウント(強く推奨) |
|
|
| thick モードの Instant Client ディレクトリ |
| 意味的に読み取り専用を強制(デフォルト true) |
| コネクションプールサイズ |
セキュリティ
変数 | 説明 |
| Bearer 認証を有効にするか(本番では必ず ON) |
| 静的 Bearer Token |
| カンマ区切りの admin トークン(利用者/書き込みエクスポートツール用) |
| トークンバケットレート制限 |
ツール一覧
ツール | 説明 | トークンが必要 |
| 蔵書検索(フィールド/分類/所蔵場所/在館フィルタ/並び替え/ページネーション) | — |
| 単一冊子の完全書誌情報(全所蔵複本と流通統計を含む) | — |
| ISBN/バーコード/タイトルで複本の在館貸出可能状態を確認 | — |
| 人気貸出ランキング(分類フィルタ可能) | — |
| 直近 N 日の新着案内 | — |
| 中国図書館分類法ブラウズ/プレフィックスごとのリアルタイムヒット数 | — |
| 機関横断連合共同目録読み取り専用検索(デフォルト OFF) | 設定 |
| 蔵書統計(総数/所蔵場所別/分類別) | — |
| 利用者の現在の貸出中 | admin |
| 利用者の貸出履歴 | admin |
| 利用者の延滞金 | admin |
| データソースとサービス状態 | — |
汇文 ACS / SIP2 インターフェース機能の説明と連携評価は docs/汇文ACS-SIP2インターフェース説明と連携評価.md を参照(権威フィールドマッピング、読み取り専用サブセット候補、明確な禁用項目)。
利用者ツールはデフォルトでマスク(include_pii=false のときは証件番号や連絡先などを返さない;true のときは admin が必要)。 n
*** n
クライアント連携例
Claude Desktop / MCP をサポートするデスクトップクライアント
GXP6 n
リモート HTTP(ゲートウェイでの認証は別途必要) n
GXP7 n
クライアントは ${MCP_SERVER_URL} を使って http://<host>:8765/mcp/(Streamable HTTP)に接続します。
HUIWEN_AUTH_ENABLED=true のとき、トークンはツールパラメータ token として呼び出し時に渡され;
HTTP Authorization ヘッダーはサーバー側で消費されません(デプロイガイド §3.2 参照)。 n
使用シナリオ
対象 | シナリオ |
利用者 | 「『三体』はある?何階?何冊借りられる?近くの人気は?」—— 本探し/受験勉強/研究の一気通貫 |
レファレンス librarian | 自動で蔵書/複本を確認 → 回答草案作成 → 人が確認(Copilot モード) |
学科 librarian | 学科書誌、文献支援統計、学部推薦購入報告 |
選書/目録担当 | ISBN 重複チェック、欠蔵分析、新着案内、メタデータ検証 |
館長 | 蔵書/流通統計グラフ、データ週報 |
AI 図書館ポータル | スマート Q&A/スマート推薦のコアデータ層 |
連合共同構築 | 機関横断共同検索(欠蔵→連合で本を探す→正式 ILL) |
完全な提案(ローカル LLM + RAG の階層的アプローチと国内外のベンチマークを含む)は
docs/サービスとアプリケーション提案.md を参照。 n
セキューリティとコンプライアンス
デフォルト読み取り専用:すべてのツールは読み取り専用;書き込み操作(延長/予約/ILL 発注)は意図的に未実装。
ホワイトリスト SQL:Oracle バックエンドは
db/queries.py内のパラメータ化 SQL 閉じた集合のみ実行、 自由 SQL はなし。全リンクゲート:認証 → レート制限 → 利用者/PII ゲート → 監査(JSONL)。利用者個人データ は admin トークンが必要でデフォルトでマスク。
認証契約(実測確認済み):トークンはツールパラメータ
tokenで渡される(各ツール オプションパラメータ、_guardがパラメータから取り出しHUIWEN_AUTH_BEARER_TOKENと比較)、 HTTPAuthorizationヘッダーの透過は未実装——トランスポート層 TLS/統一認証はリバースプロキシゲートウェイ が担当し、huiwen-mcp 自身の認証はゲートウェイ背後にある第二の防御線。トークンは監査ログに書き込まれない (_guardが先に pop してから記録)。機密情報をリポジトリに含めない:DSN/パスワード/JWT/サイトアドレスは環境変数または
config.local.json(git-ignored)のみ。リポジトリには実際のデプロイデータは一切含まれません(NOTICE 参照)。外部サービスは慎重に:連合 PROCAT はサードパーティのマルチテナントシステムであり、デフォルトでオフ; 有効にする前に連合/サービス提供者と権限を確認してください。OPAC は非公開で、歴史的に公開脆弱性が存在するため、 アダプタはホワイトリストパラメータのみを使用。
脆弱性報告と対応は SECURITY.md を参照。 n
テスト
ファイル | 内容 | 実行 |
| demo バックエンドのスモークテスト(オフライン) |
|
| stdio 統合/認証回帰テスト(demo) |
|
| 実データベース統合(デフォルト OFF) |
|
| 連合 PROCAT 実サイト(デフォルト OFF) |
|
実データベース/実サイトのテストはデフォルトでオフ(ローカルで明示的に HUIWEN_LIVE_* を設定した場合のみ実行)、
実際のシステムに触れることを防ぎます。
Docker イメージはデフォルトでビルド/公開しません(公開ポリシーは「ソースコードとドキュメントのみ公開」):
イメージが必要な場合はローカルで docker build を実行してください(Oracle thick モードの場合は --build-arg WITH_INSTANT_CLIENT=true を追加)。
プロジェクト構成
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ロードマップ
Phase 1:読み取り専用検索 MCP(demo + opac + oracle 三バックエンド)
Phase 2:OPAC / Oracle 実データベース連携テスト、連合共同目録連携テスト(契約実測 + トークン方式)
Phase 2 残り:Docker イメージ(非 root、再現可能ビルド)+ デプロイガイド(リバースプロキシレベル認証テンプレート含む)
リリース済み:
v1.0.0tag + GitHub Release(ソースコードとドキュメント;CI/ワークフローなし、Docker イメージは自動ビルドなし)OAuth2/JWT ゲートウェイ実装、学内 CAS / 一網通弁との連携(テンプレートは準備済み、現地設定が必要)
Phase 2.5/3 候補:汇文 ACS/SIP2 読み取り専用サブセット(評価は docs/汇文ACS-SIP2接口说明与对接評估.md 参照)
Phase 3:RAG ベクターストア + ローカル LLM スマート推薦 / レファレンス(docs/服務與應用建議.md 参照) n* [ ] Phase 4:汇文新世代プラットフォーム OpenAPI 連携 n *** n
ライセンスとコンプライアンス(Open Source & Compliance)
オープンソースライセンスバージョン推奨
本プロジェクトは Apache License 2.0 を推奨します(リポジトリには完全な LICENSE が添付されています):
寛容(permissive):大学、ベンダー、クラウドプラットフォームが自由に使用・修正・再配布(商用利用を含む)できるようにし、著作権表示とライセンス表示のみを保持する必要がある——AIツールチェーンやサードパーティシステムへの採用に有利。
特許許諾:Apache-2.0は、コントリビューターに対して特許使用許諾を明確に付与する(第3条)。複数の組織・関係者(複数の大学連合、技術ベンダー)が共同で貢献する場合に、より明確で「訴訟耐性」が高い。
コントリビューター条項の標準化:暗黙的にプロジェクトへの許諾を付与する(第5条 Contribution Grant)。各コントリビューターが個別にCLAに署名する負担を省き、GitHub公開プロジェクトの慣行に適合する。
差別化:MITと比較して、Apache-2.0は機関として正式に公開され、複数者による長期的なメンテナンスが想定されるインフラ型プロジェクトに適している。
貴館が「ミニマルスタイル」をより好む場合は、いつでもMITに戻すことができます:
LICENSE全文を置き換え、pyproject.toml内のlicenseを{ text = "MIT" }に戻し、READMEの該当箇所を更新してください。
コンプライアンス声明(重要)
ベンダー/サードパーティのソースコードは含まれていません:本プロジェクトはクローズドソースの汇文/Libsysに対する独立した相互運用層であり、汇文または連盟側の専有コードは一切含まれていません。OPAC/連盟契約は、公開Webページのプロトコルと実際のサイトの応答記録にのみ基づいています。詳細はNOTICEを参照してください。
リポジトリ内にデプロイに敏感なデータは公開されていません:実際のDSN、アカウントパスワード、OPACログインインスタンス、連盟JWT、読者PII、ベンダーの
SECRET_KEYはリポジトリ内にありません(SECURITY.md/CONTRIBUTING.mdでレッドラインが設定されており、疑わしい機密データのコミットは厳禁)。商標:
汇文、Libsys、OPACはそれぞれ江蘇汇文ソフトウェアなどの権利者の商標/製品名であり、本リポジトリは相互運用のための参照に過ぎず、推薦や関連性を示すものではありません。本ソフトウェアを使用する前に、汇文ソフトウェア、連盟サービス提供者、および貴館の情報センターと許諾および使用範囲を確認してください。
トラブルシューティング
現象 | 対応 |
「このバックエンドはサポートされていません」 |
|
Oracle | 11gの場合は |
OPAC検索タイムアウト | サイト側が遅い(15~40秒が一般的)。 |
| 連盟が有効になっていないか、トークンが不足している → 設定を有効にしてJWTを入力 |
連盟が | JWTの有効期限切れ → OPACに再ログインして |
フレームワークがツール登録を拒否( | ツール関数は明示的なパラメータが必要; |
読者ツールが「管理者トークンが必要です」を返す |
|
Available Tools
12 toolsbrowse_classificationB
中图法分类浏览:传入分类号前缀(如 'T')返回该类目馆藏统计。
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | ||
| prefix | No | 分类号前缀;为空返回各大类 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 / 条码 / 题名查询馆藏复本在馆(可借)状态。
| Name | Required | Description | Default |
|---|---|---|---|
| isbn | No | ISBN 号(优先) | |
| title | No | 题名(demo 后端支持;oracle 后端请用 search_books) | |
| token | No | ||
| barcode | No | 条码号(优先于 isbn 匹配) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
获取单册书目完整信息(含全部馆藏复本状态与流通统计)。
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | ||
| marc_no | Yes | MARC 记录号(search_books 结果中的 marc_no) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
热门借阅图书排行(可按中图法大类过滤)。
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | ||
| top_n | No | 返回条数(<=50) | |
| cls_no | No | 中图法分类号前缀(如 'I') | |
| period | No | total|year | total |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 天新书通报。
| Name | Required | Description | Default |
|---|---|---|---|
| clc | No | 中图法分类号前缀过滤 | |
| days | No | 时间范围(天) | |
| token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 认证令牌)。
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | ||
| cert_id | Yes | 读者证件号 CERT_ID | |
| include_pii | No | 是否返回实名(默认脱敏/隐藏) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 认证令牌)。
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | ||
| cert_id | Yes | 读者证件号 CERT_ID | |
| include_pii | No | 是否返回实名(默认脱敏/隐藏) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 认证令牌)。
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | ||
| cert_id | Yes | 读者证件号 CERT_ID | |
| include_pii | No | 是否返回实名(默认脱敏/隐藏) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
馆藏统计。
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | ||
| metric | No | total(总数)| by_location(按馆藏地)| by_clc(按分类) | total |
| range_desc | No | 统计时间范围描述(如 '2026') |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
返回当前数据源与后端健康状态。
| Name | Required | Description | Default |
|---|---|---|---|
| token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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/馆藏地在馆信息列表。
| Name | Required | Description | Default |
|---|---|---|---|
| clc | No | 中图法分类号前缀(如 'T'、'TP') | |
| page | No | ||
| sort | No | relevance|circulation|date | relevance |
| field | No | any|title|author|subject|publisher|isbn|callno|year | any |
| query | Yes | 检索词 | |
| token | No | ||
| location | No | 馆藏地代码 | |
| page_size | No | ||
| pub_year_max | No | ||
| pub_year_min | No | ||
| in_library_only | No | 是否只返回有在馆复本的图书 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
union_searchA
跨馆联盟联合目录检索(OPAC 结果页「联盟图书馆检索」的外部 PROCAT 服务)。
默认关闭,需 opac.union_enabled=true 且配置 union_base_url / union_tenant / union_token(读者会话 JWT,由 OPAC reader 登录取得,见 docs/联盟联合目录检索.md)。 仅只读检索,不实现馆际借阅下单(写操作)。未启用或配置不完整时返回明确提示。
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| field | No | any|title|author|subject|isbn|clc|publisher|series|callno | any |
| logic | No | and(多个条件同时满足)| or(任一满足) | and |
| query | Yes | 检索词(多值用逗号/分号分隔,按 logic 组合为多条件) | |
| token | No | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 explicitly states the tool is read-only, requires configuration, and returns clear prompts when improperly configured. It does not elaborate on authentication failures or performance, but the reference to external documentation partly compensates for these gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with three sentences that front-load the purpose, then cover prerequisites and behavioral notes. It is concise and to the point, though it could benefit from slight restructuring (e.g., bullet points for configuration) without adding length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (cross-library search, configuration requirements, read-only), the description covers the essential aspects: purpose, prerequisites, behavioral traits, and error handling. The presence of an output schema mitigates the need for return value details. It is sufficiently complete for an agent to understand the tool's role and constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, meaning half of the parameters lack descriptions in the schema. The tool description adds meaningful context: it explains the token parameter as a reader session JWT, outlines configuration dependencies, and clarifies the query parameter's multi-value behavior. This adds value beyond the raw schema, although a full parameter breakdown is absent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as a cross-library union catalog search ('跨馆联盟联合目录检索'), specifying it as an external PROCAT service for OPAC results. This is a specific verb-resource combination that distinguishes it from sibling tools like search_books, which likely target a single library catalogue.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear prerequisites (requires configuration flags and a JWT token) and declares its read-only nature ('仅只读检索'), clarifying what it does not do (no inter-library loan ordering). While it does not explicitly compare to sibling tools, the context signals infer its specialized use case, and the description mentions an external documentation reference for further detail.
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.
12 tool updates
v0.1.0- First observed
browse_classification - First observed
get_availability - First observed
get_book_detail - First observed
get_hot_books - First observed
get_new_arrivals - First observed
get_reader_borrowing - First observed
get_reader_fines - First observed
get_reader_history - First observed
get_statistics - First observed
get_system_status - First observed
search_books - First observed
union_search
TDQS
Scored across 12 tools
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.
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.
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.
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
Related MCP Connectors
Read-only MCP server exposing a user ORANO library to their own AI agent.
The HubSpot MCP Server acts as a bridge that enables AI assistants and Large Language Models to securely interact with HubSpot CRM data through natural conversation, without requiring users to understand complex API structures. It provides read-only access to standard CRM objects (contacts, companies, deals, tickets, products, invoices, and more) and their associations, secured via OAuth 2.0, allowing AI agents to perform tasks like summarizing deals, fetching company updates, and looking up record changes.
Cloud-hosted MCP server for secure AI access to enterprise data sources via CData Connect AI.
Read-only MCP server: let AI agents read your ORANO saved-video library, tasks, and memory.
Related MCP Servers
- AlicenseAqualityDmaintenanceRead-only MCP server that connects AI clients to Crescender's school asset, loan, member, and asset-comms API.6MIT
- AlicenseAqualityAmaintenanceRead-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.7MIT
- FlicenseNot gradedqualityCmaintenanceRead-only MCP server for AI clients to browse and search project files securely, with configurable permissions, virtual paths, and key-based access.-
- FlicenseBqualityCmaintenanceA secure, read-only MCP server that enables AI assistants to inspect transactions, vendor performance, wallet balances, and analytics through validated REST API calls.19-