server_local.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. '''
  2. Function:
  3. Implementation of Naive MCP Examples
  4. Author:
  5. Zhenchao Jin
  6. WeChat Official Account (微信公众号):
  7. Charles的皮卡丘
  8. '''
  9. import sys, logging
  10. from mcp.server.fastmcp import FastMCP
  11. from imagedl import imagedl as imagedl_pkg
  12. '''settings'''
  13. _client = None
  14. mcp = FastMCP("imagedl")
  15. logging.basicConfig(stream=sys.stderr, level=logging.INFO)
  16. def getclient(image_source=None, init_image_client_cfg=None, search_limits=1000, num_threadings=5, request_overrides=None):
  17. """get image client"""
  18. global _client
  19. if _client is None:
  20. init_image_client_cfg = init_image_client_cfg or {}
  21. init_image_client_cfg.setdefault("disable_print", True)
  22. _client = imagedl_pkg.ImageClient(
  23. image_source=image_source or "BaiduImageClient", init_image_client_cfg=init_image_client_cfg, search_limits=search_limits,
  24. num_threadings=num_threadings, request_overrides=request_overrides or {},
  25. )
  26. return _client
  27. @mcp.tool()
  28. def search(keyword: str, image_source: str | None = None, search_limits_overrides: int | None = None, num_threadings_overrides: int | None = None, filters: dict | None = None) -> dict:
  29. """Search images (metadata only)."""
  30. client = getclient(image_source=image_source)
  31. infos = client.search(
  32. keyword=keyword, search_limits_overrides=search_limits_overrides, num_threadings_overrides=num_threadings_overrides, filters=filters,
  33. )
  34. return {"image_infos": infos}
  35. @mcp.tool()
  36. def download(image_infos: list) -> dict:
  37. """Download images described by image_infos."""
  38. out = getclient().download(image_infos=image_infos)
  39. return {"ok": True, "downloaded": out}
  40. '''main'''
  41. if __name__ == "__main__":
  42. mcp.run(transport="stdio")