Skip to content

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

@MisonL

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 做全文检索增强?

下一步

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

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

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