Skip to content

可以添加mcp server支持吗?类似context7,让Agent也能获取信息 #176

Description

@MisonL

#以下是来自Codex的设计方案

mcp-server-implementation-plan.md

BookStack MCP Server 实施方案

基于现有 BookStack 结构(Beego 应用,文档内容在 document_store.go/md_document_store,搜索逻辑在 document_search_result.goelasticsearch.go),为 Agent 提供类似 Context7 的信息获取能力。


方案概览

项目 说明
目标 提供 MCP Server,让 Agent 可检索书籍/文档、获取内容片段,并遵守书籍私有/权限规则
推荐架构 独立 MCP Sidecar(与 BookStack 同库/同配置),最小侵入、易于部署与回滚
备选架构 内置到 BookStack 进程里(同 HTTP 服务或独立端口),开发更省但耦合更深

MCP 能力设计

Resources(推荐)

Resource URI 说明
bookstack://books 书籍列表(支持分页/分类/私有过滤)
bookstack://books/{book_id} 书籍元信息
bookstack://books/{book_id}/docs 文档目录树/扁平列表
bookstack://docs/{doc_id} 文档全文(markdown/text/html 可选)
bookstack://docs/{doc_id}#section={heading} 按标题段落切分后的内容
bookstack://recent 最近更新文档

Tools(推荐)

Tool 参数 说明
search_docs query, book_id?, limit?, member_token? 全文检索并返回片段 + doc_id
get_doc doc_id, format=markdown|text|html 按需拉取完整内容
list_books category?, include_private?, member_token? 书籍列表
list_docs book_id, tree=true|false 文档列表/目录
get_book_outline book_id 树状目录

Prompts(可选)

Prompt 说明
summarize_doc(doc_id) 生成摘要(配合 Agent 侧使用)

检索与内容生成

类别 方案
默认检索 复用 document_search_result.go 的 SQL LIKE 搜索(易落地)
可选增强 接入现有 ES(elasticsearch.go),有则用 ES,否则降级 SQL
内容来源 优先 DocumentStore.ContentDocumentStore.Markdown,避免仅用 HTML
切分策略 按 Markdown 标题切分(或固定字数切分),产出 section_id 便于引用

权限与安全

类别 方案
身份 新增 MCP Token(配置项或数据库表);或复用已有成员系统(member_id + token)
授权 遵循 books.privately_ownedrelationship 角色校验
隔离 只读访问;限制 IP 白名单/速率;支持只公开内容模式

实施步骤(里程碑)

阶段 目标
M0 基线 确定传输方式(stdio/HTTP SSE)、部署形态(sidecar/内置)、鉴权方案
M1 MVP MCP Server 骨架 + list_books/list_docs/get_doc/search_docs(SQL 检索)
M2 权限 接入角色校验、私有书籍访问控制、审计日志
M3 体验 加入 Markdown 分段/引用、缓存、ES 可选增强
M4 文档 配置说明、Agent 侧接入示例、运维与监控

配置建议

# MCP Server 配置
mcp.enabled: true
mcp.bind: "0.0.0.0:9090"
mcp.auth_token: "your-secure-token"
mcp.allow_private: false

# Elasticsearch(可选)
ELASTICSEARCH_ON: true
ELASTICSEARCH_HOST: "http://localhost:9200"

风险与规避

风险 规避措施
隐私泄露 严格按书籍权限过滤(relationship + 私有书籍 token)
性能 搜索与全文读取限流/分页;热点缓存(书籍目录、最近更新)
内容质量 优先 Markdown/Content,必要时 HTML→Text 转换

待确认事项

Important

在开始实施前,请确认以下决策点:

  1. 部署形态:采用 Sidecar MCP 还是内置到 BookStack 进程?
  2. 鉴权方式:独立 MCP Token 还是复用成员登录/Token?
  3. 检索增强:是否接入 ES 做全文检索增强?

下一步

如果你认可此方案,我可以进一步:

  • 把实施拆成可执行任务
  • 给出详细接口定义
  • 提供路由与数据库字段映射

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions