书籍数据库MCP服务器

一个基于Model Context Protocol(MCP)的书籍数据库查询服务器,提供按ISBN、标题批量检索书籍信息的功能,适用于开发演示和培训场景。

  • by sifiadlene
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 sifiadlene/demo-mcp-server

使用说明

书籍数据库 MCP 服务器

[!NOTE](注:此标记通常用于指示注意事项或重要提示,直接翻译为中文即“注意”) 这是一个小型的MCP(模型上下文协议)演示服务器,用于GitHub Copilot代理和MCP培训课程期间。它在一篇解释中被用作演示 副驾驶代理与多控制器协议(或:协同驾驶代理与多点控制协议) 仓库。

功能性的

MCP服务器的图书数据库提供了一套简单的工具集,使具备MCP功能的代理或客户端能够查询经过整理的图书数据库。主要功能包括:

  • 通过书名检索书籍的基本信息(ISBN、书名、作者)。
  • 通过ISBN检索书籍的详细信息(摘要、日期、作者)。
  • 批量查询:通过书名列表或ISBN列表请求多本书籍。
  • 使用小型JSON文件作为支撑数据集(便于演示时阅读和修改)。

技术

  • 运行时:Node.js(TypeScript 源码在 src/)。
  • 协议:使用模型上下文协议(MCP) @modelcontextprotocol/sdk。
  • 传输:标准I/O传输(StdioServerTransport) —— 这个服务器通过标准输入输出进行通信。
  • 验证:对输入模式进行验证 zod 针对每种工具。
  • 数据: src/data/books.json (基本列表)和 src/data/books-details.json (摘要及日期)。
  • 在……中实现的工具 src/index.ts:
    • get-book-by-isbn — 取用 isbn: string (10个字符)
    • get-book-by-title — 取(或:拿) title: string
    • get-books-by-titles — 采取 titles: string[]
    • get-books-by-isbn-list — 采取;拿取;花费(根据上下文,具体含义可能有所不同) isbnList: string[] (10个字符的项目)

设置

先决条件: Node.js(建议18+版本)和npm。

  1. 克隆仓库并进入演示文件夹:
git clone <repo-url>
cd <repo-root>
  1. 安装依赖项:
npm install
  1. 构建TypeScript源代码:
npm run build

构建生成 build/index.js 和(the) build 文件夹已在 package.json 中列出 files。

跑

启动MCP服务器(它在stdio上运行,并将启动日志写入stderr):

node build/index.js

当成功运行时,你应该在标准错误输出(stderr)上看到一条类似的信息:

Book database MCP Server running on stdio

在演示过程中,你无需手动启动服务器,因为它将由(系统/程序)自动启动 Web应用演示仓库中的MCP服务器配置。

使用示例

服务器提供了上述列出的工具名称。示例调用(概念性):

  • 通过ISBN获取详细信息:

    • 工具: get-book-by-isbn
    • 输入: { "isbn": "0451524935" } # 返回“1984”的详细信息
  • 通过标题获取基本信息:

    • 工具: get-book-by-title
    • 输入: { "title": "The Hobbit" }
  • 按标题批量查询:

    • 工具: get-books-by-titles
    • 输入: { "titles": ["1984", "Brave New World"] }

数据

这些数据集是小型的JSON文件,位于 src/data/ 因此,您可以在研讨会期间轻松调整条目:

  • src/data/books.json — 一组简单的书籍对象(ISBN、标题、作者)
  • src/data/books-details.json — 带有a的物体 books 包含摘要和日期的数组

注释

  • 这个项目规模较小,且重点在于展示如何通过MCP(可能是指某种中间件或通信协议)来提供工具服务。
  • 如果你想在本地交互式地测试工具,可以编写一个使用(相关技术或API的)小型Node客户端 StdioClientTransport 来自 @modelcontextprotocol/sdk 并以此服务器作为子进程启动,以便它们的stdio流(标准输入输出流)能够相互连接。