File size: 2,080 Bytes
bdcdaf4
 
 
 
 
 
 
 
 
 
 
 
 
d0c18f0
 
 
 
 
 
 
bdcdaf4
 
 
 
d0c18f0
 
bdcdaf4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cc826a1
bdcdaf4
 
 
 
 
cc826a1
bdcdaf4
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
"""
文档合并拆分插件 MCP工具定义
"""

from app.mcp.decorators import mcp_tool
from pydantic import BaseModel, Field
from typing import List

from .core import do_merge, do_split


class MergeInput(BaseModel):
    """文档合并输入参数"""
    files_base64: List[str] | None = Field(
        default=None, description="待合并文件的Base64编码列表"
    )
    files_url: List[str] | None = Field(
        default=None, description="待合并文件的URL列表"
    )
    output_format: str = Field(default="markdown", description="输出格式:markdown、text")


class SplitInput(BaseModel):
    """文档拆分输入参数"""
    content_base64: str | None = Field(default=None, description="待拆分文档的Base64编码")
    content_url: str | None = Field(default=None, description="待拆分文档的URL")
    split_by: str = Field(default="line", description="拆分方式:line、paragraph、chunk")
    chunk_size: int = Field(default=100, ge=10, le=10000, description="chunk模式下的块大小")


class MergeOutput(BaseModel):
    """合并输出结果"""
    success: bool = Field(description="操作是否成功")
    output_base64: str | None = Field(description="合并结果的Base64编码")
    message: str = Field(description="结果说明")


class SplitOutput(BaseModel):
    """拆分输出结果"""
    success: bool = Field(description="操作是否成功")
    chunks_base64: List[str] | None = Field(description="拆分片段的Base64编码列表")
    message: str = Field(description="结果说明")


@mcp_tool(name="doc-merge", title="文档合并", description="合并多个文档内容")
async def doc_merge(params: MergeInput) -> MergeOutput:
    result = await do_merge(params.files_base64, params.output_format)
    return MergeOutput(**result)


@mcp_tool(name="doc-split", title="文档拆分", description="拆分文档为多个片段")
async def doc_split(params: SplitInput) -> SplitOutput:
    result = await do_split(params.content_base64, params.split_by, params.chunk_size)
    return SplitOutput(**result)