Z39.50库系统MCP服务器
快速、高效的MCP(模型上下文协议)服务器,用于在多个启用Z39.50的库系统中搜索库目录。
特性
- 快速并行搜索:使用异步I/O同时查询多个库
- 多图书馆系统:美国国会图书馆、OCLC WorldCat、学术图书馆网络
- 丰富的搜索选项:标题、作者、ISBN、主题、关键字搜索
- 可用性检查:查找哪些图书馆有特定的书籍
- 详细记录:检索全面的书目信息
- MARC导出:下载二进制MARC、JSON或XML格式的记录
- 结果重复数据删除:跨库智能合并结果
- 连接池:持久连接可实现最佳性能
快速开始
安装
# Install dependencies
pip install -r requirements.txt运行服务器
# Start the MCP server
python server.py
# With debug logging
python server.py --debug与Claude Desktop一起使用
添加到您的Claude Desktop配置中:
{
"mcpServers": {
"z3950": {
"command": "python",
"args": ["/path/to/Z3950/server.py"]
}
}
}然后重新启动Claude Desktop,Z39.50工具将可用。
可用工具
搜索库
跨多个图书馆系统搜索。
search_libraries(
query: "Harry Potter",
libraries: "loc,worldcat", # Optional: defaults to all
query_type: "title", # title, author, isbn, subject, keyword
max_results: 50
)示例:
- 按标题查找书籍:
search_libraries("The Great Gatsby", query_type="title") - 按作者查找书籍:
search_libraries("Stephen King", query_type="author") - 按ISBN查找:
search_libraries("978-0-262-03384-8", query_type="isbn")
check_可用性
查一下哪些图书馆有书。
check_availability(
isbn: "978-0-262-03384-8",
libraries: "loc,worldcat" # Optional: defaults to all
)返回每个库的可用性状态和呼叫号码。
获取记录细节
获取全面的书目信息。
get_record_details(
isbn: "978-0-262-03384-8",
library: "loc"
)返回详细的元数据,包括作者、出版商、主题、出版年份等。
浏览_主题
浏览可用的主题类别。
browse_subjects(
library: "loc",
subject_prefix: "History",
limit: 20
)list_librarys
获取有关可用库系统的信息。
list_libraries()export_marc_record
下载MARC记录供本地使用。
export_marc_record(
isbn: "978-0-262-03384-8",
library: "loc",
format: "binary" # binary, json, or xml
)可用的库
美国国会图书馆(loc)
- 主机:z3950.网址:7090
- 数据库:旅行者号
- 描述:世界上最大的图书馆,藏书丰富
OCLC WorldCat(世界猫)
- 主机:z3950.oclc.org:210
- 数据库:世界猫
- 描述:世界上最大的图书馆目录,包含来自数千家图书馆的记录
I-Share财团(I-Share)
- 主机:伍芬德。卡利。伊利诺伊州。教育程度:210
- 数据库:i-share
- 描述:伊利诺伊州学术图书馆网络,内容来自主要大学
前Libris Alma(Alma模板)
- 主机:z3950.阿拉木图图书馆集团网站:1921
- 描述:现代图书馆管理系统(需要institution_id配置)
配置
库配置位于 config/libraries.json。要添加新库,请执行以下操作:
{
"my-library": {
"name": "My Library System",
"host": "z3950.mylib.edu",
"port": 210,
"database": "mylibdb",
"preferred_syntax": "USMARC",
"timeout": 5,
"max_records": 100
}
}性能优化
服务器针对速度进行了优化:
- 异步并行查询:同时查询多个库
- 连接池:持久连接消除了握手开销
- 智能超时:在慢速服务器上发生快速故障时超时5秒
- 二进制MARC:首选格式(比JSON/XML更快)
- 懒惰解析:默认情况下仅提取所需字段
- 结果重复数据删除:O(1)通过ISBN/控制号进行重复检测
- 流媒体结果:增量结果交付
绩效目标:
- 单库搜索:\=0.1.0):MCP服务器框架
- 皮马克 (>=5.0.0):MARC记录处理
- 层 (>=3.11):查询解析器(PLY-Python Lex Yacc)
所有Z39.50协议实现都是纯Python,没有编译依赖关系。
搜索语法
通用命令语言
该系统使用CCL进行直观搜索:
- 标题:
title="The Great Gatsby" - 作者:
author="F. Scott Fitzgerald" - 国际标准书号:
isbn="978-0-7432-7356-5" - 主题:
subject="American fiction" - 关键词:
keyword="gatsby" - 出版商:
publisher="Scribner" - 年:
year="1925"
多种条件
与AND/OR结合:
author="Shakespeare" AND title="Hamlet"subject="History" OR subject="Biography"
发展
运行测试
# All tests
python -m pytest tests/ -v
# With performance benchmarks
python -m pytest tests/ -v --benchmark
# Specific test file
python -m pytest tests/test_search.py -v添加新库
- 编辑
config/libraries.json - 测试连接:
python -c "from z3950_client.connection_pool import AsyncConnectionPool; pool = AsyncConnectionPool(); print(asyncio.run(pool.test_connection('my-lib')))" - 重启服务器
调试模式
运行调试日志:
python server.py --debug故障排除
连接超时
- 检查图书馆是否在线:
list_libraries()验证配置 - 增加超时时间
config/libraries.json - 尝试特定库而不是全部库
未找到结果
- 尝试不同的搜索类型(标题与关键字)
- 检查ISBN格式(可能需要删除连字符)
- 一些图书馆的藏书有限
MARC分析错误
- 确保库返回USMARC格式
- 尝试不同的查询以获取不同的记录
- 联系库支持以进行格式配置
参考文献
许可证
此项目包含从开源PyZ3950中提取的代码。请参阅各个文件头以了解归属。
贡献
要添加新功能或修复错误:
- 创建测试用例
- 实现该功能
- 确保所有测试通过
- 更新文档
支持
对于以下问题:
- Z39.50协议:检查 PyZ3950文档
- MARC格式:参见 美国国会图书馆MARC指南
- MCP集成:请参阅 MCP文件
