Files
PlantAI-rag-new/paper_writer_service/app/mcp.py
T
admin 91f6a1c242 feat: 新增论文撰写功能 paper-writer(独立 MCP 服务 + BFF 大脑 + 前端三卡)
- paper_writer_service(8097):FastAPI + MCP streamable-http 单端点,9 工具
  (propose_paper_outline/write_paper_section/get_paper_progress/search_refs/
  revise_paper_section/revise_paper/get_paper/complete_paper/cancel_paper),
  SQLite 三表(papers/paper_sections/citations,WAL),GB/T 7714 引用协议
- BFF:services/paper/{mcp_client,agent}.py(裸 JSON-RPC 客户端 + 规则状态机)、
  routers/paper.py、schemas.py 4 个 Paper*Block + ArtifactBlock 加 paper_id/citation_count、
  config.py 开关、main.py 条件注册、docgen.py 抽 insert_artifact 公共 helper
- 前端:intent.js paperIntent 纯函数、Composer docgen 分支 sub-route、sendPaper/轮询、
  PaperBriefCard/PaperOutlineCard/PaperProgressCard、DocPane cite-chip
- deploy/paper_restart.sh + toggle_paper.sh;compile_sdk.sh 白名单追加 paper 文件
- tests/paper 26 条(工具逻辑 + MCP 协议 + BFF 状态机 + 块 schema + 前端 intent 单测)
2026-09-30 22:29:22 +08:00

49 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""app/mcp.py —— paper_writer_service MCP server(单 streamable-http 端点 /mcp)。
9 个工具:propose_paper_outline / write_paper_section / get_paper_progress / search_refs /
revise_paper_section / revise_paper / get_paper / complete_paper / cancel_paper。
mcp 2.x 注意:MCPServer(非 FastMCP,来自 mcp.server.mcpserver);工具返回 dict,由 MCP
序列化为 CallToolResult(structuredContent + content:[{type:"text",text:"<json>"}])。
本文件位于 app/ 层(非 services/),可用 pydantic(mcp 自身依赖 pydantic 构造 schema)。
"""
from __future__ import annotations
from typing import Any
from .services.paper import complete, outline, search, write
def build_paper_mcp() -> Any:
from mcp.server.mcpserver import MCPServer
mcp = MCPServer(
"paper-writer",
title="PlantAI 论文撰写",
description="论文撰写能力单元:大纲生成/逐节撰写/文献引用/全文合并重排/修订。",
)
mcp.tool(name="propose_paper_outline",
description="根据论文主题与写作要求生成大纲并建论文(内部检索知识库注入选题线索)。")(outline.propose_paper_outline)
mcp.tool(name="write_paper_section",
description="撰写论文某一章节(同步长调用,90-180s)。按全局引用编号表生成正文与引用。")(write.write_paper_section)
mcp.tool(name="get_paper_progress",
description="查询论文与各章节撰写进度/字数/引用数。")(complete.get_paper_progress)
mcp.tool(name="search_refs",
description="在知识库(vstore)中检索与查询相关的文献片段。")(search.search_refs)
mcp.tool(name="revise_paper_section",
description="按用户意见重写论文某一章节,新引用追加到引用表末尾。")(write.revise_paper_section)
mcp.tool(name="revise_paper",
description="按用户意见判定需要修改哪些章节,返回受影响节清单与修订计划。")(write.revise_paper)
mcp.tool(name="get_paper",
description="拉取论文全文 markdown、参考文献列表与免责声明。")(complete.get_paper)
mcp.tool(name="complete_paper",
description="合并全文、按首次出现顺序重排引用编号、渲染 GB/T 7714 文献列表。")(complete.complete_paper)
mcp.tool(name="cancel_paper",
description="取消论文(置 cancelled)。")(complete.cancel_paper)
return mcp
paper_mcp = build_paper_mcp()