Skip to content

Commit d54efad

Browse files
committed
[Feat] Support Qianfan PP-StructureV3 MCP server (#17329)
* Support Qianfan PP-StructureV3 MCP server * Bump version to 0.4.1
1 parent 7944bed commit d54efad

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

mcp_server/paddleocr_mcp/__main__.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,21 @@ def _validate_args(args: argparse.Namespace) -> None:
123123
file=sys.stderr,
124124
)
125125
sys.exit(2)
126+
elif args.ppocr_source == "qianfan":
127+
if not args.qianfan_api_key:
128+
print("Error: The Qianfan API key is required.", file=sys.stderr)
129+
print(
130+
"Please either set `--qianfan_api_key` or set the environment variable "
131+
"`PADDLEOCR_MCP_QIANFAN_API_KEY`.",
132+
file=sys.stderr,
133+
)
134+
sys.exit(2)
135+
if args.pipeline not in ("PaddleOCR-VL", "PP-StructureV3"):
136+
print(
137+
f"{repr(args.pipeline)} is currently not supported when using the {repr(args.ppocr_source)} source.",
138+
file=sys.stderr,
139+
)
140+
sys.exit(2)
126141

127142

128143
async def async_main() -> None:

mcp_server/paddleocr_mcp/pipelines.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -655,7 +655,7 @@ async def _format_output(
655655

656656
class _LayoutParsingHandler(SimpleInferencePipelineHandler):
657657
def _get_service_endpoint(self) -> str:
658-
return "layout-parsing"
658+
return "layout-parsing" if self._ppocr_source != "qianfan" else "paddleocr"
659659

660660
def _transform_local_kwargs(self, kwargs: Dict[str, Any]) -> Dict[str, Any]:
661661
return {
@@ -869,6 +869,12 @@ def _create_local_engine(self) -> Any:
869869
device=self._device,
870870
)
871871

872+
def _transform_service_kwargs(self, kwargs: Dict[str, Any]) -> Dict[str, Any]:
873+
kwargs = super()._transform_service_kwargs(kwargs)
874+
if self._ppocr_source == "qianfan":
875+
kwargs["model"] = "pp-structurev3"
876+
return kwargs
877+
872878

873879
class PaddleOCRVLHandler(_LayoutParsingHandler):
874880
def register_tools(self, mcp: FastMCP) -> None:
@@ -908,6 +914,12 @@ def _create_local_engine(self) -> Any:
908914
device=self._device,
909915
)
910916

917+
def _transform_service_kwargs(self, kwargs: Dict[str, Any]) -> Dict[str, Any]:
918+
kwargs = super()._transform_service_kwargs(kwargs)
919+
if self._ppocr_source == "qianfan":
920+
kwargs["model"] = "paddleocr-vl-0.9b"
921+
return kwargs
922+
911923

912924
_PIPELINE_HANDLERS: Dict[str, Type[PipelineHandler]] = {
913925
"OCR": OCRHandler,

mcp_server/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "paddleocr_mcp"
7-
version = "0.3.0"
7+
version = "0.4.1"
88
requires-python = ">=3.10"
99
dependencies = [
1010
"mcp>=1.5.0",

0 commit comments

Comments
 (0)