openboost-cli 0.1.0__tar.gz → 1.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. openboost_cli-1.0.1/PKG-INFO +171 -0
  2. openboost_cli-1.0.1/README.md +150 -0
  3. {openboost_cli-0.1.0 → openboost_cli-1.0.1}/pyproject.toml +8 -21
  4. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/__init__.py +4 -4
  5. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/cli/interactive.py +10 -10
  6. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/cli/main.py +15 -14
  7. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/client.py +5 -5
  8. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/config.py +17 -9
  9. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/mcp_client.py +5 -5
  10. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/registry.py +2 -2
  11. openboost_cli-1.0.1/src/openboost_cli/schemas/__init__.py +1 -0
  12. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas_loader.py +2 -2
  13. openboost_cli-1.0.1/src/openboost_cli.egg-info/PKG-INFO +171 -0
  14. openboost_cli-1.0.1/src/openboost_cli.egg-info/SOURCES.txt +81 -0
  15. openboost_cli-1.0.1/src/openboost_cli.egg-info/entry_points.txt +2 -0
  16. {openboost_cli-0.1.0 → openboost_cli-1.0.1}/src/openboost_cli.egg-info/requires.txt +0 -2
  17. openboost_cli-1.0.1/src/openboost_cli.egg-info/top_level.txt +1 -0
  18. {openboost_cli-0.1.0 → openboost_cli-1.0.1}/tests/test_cli.py +2 -2
  19. {openboost_cli-0.1.0 → openboost_cli-1.0.1}/tests/test_parse_result.py +1 -1
  20. {openboost_cli-0.1.0 → openboost_cli-1.0.1}/tests/test_schemas_and_args.py +3 -3
  21. openboost_cli-0.1.0/LICENSE +0 -21
  22. openboost_cli-0.1.0/PKG-INFO +0 -153
  23. openboost_cli-0.1.0/README.md +0 -122
  24. openboost_cli-0.1.0/src/openboost_cli.egg-info/PKG-INFO +0 -153
  25. openboost_cli-0.1.0/src/openboost_cli.egg-info/SOURCES.txt +0 -82
  26. openboost_cli-0.1.0/src/openboost_cli.egg-info/entry_points.txt +0 -2
  27. openboost_cli-0.1.0/src/openboost_cli.egg-info/top_level.txt +0 -1
  28. openboost_cli-0.1.0/src/proboost_cli/schemas/__init__.py +0 -1
  29. {openboost_cli-0.1.0 → openboost_cli-1.0.1}/setup.cfg +0 -0
  30. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/cli/__init__.py +0 -0
  31. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/coerce_args.py +0 -0
  32. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/parse_result.py +0 -0
  33. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/amazon/__init__.py +0 -0
  34. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/amazon/amz_category_query.json +0 -0
  35. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/amazon/amz_hot_amz_hot_cat_tree.json +0 -0
  36. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/amazon/amz_hot_amz_hot_list.json +0 -0
  37. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/amazon/amz_market_price.json +0 -0
  38. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/amazon/amz_product_selection.json +0 -0
  39. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/amazon/amz_review_query.json +0 -0
  40. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/amazon/amz_sales_query.json +0 -0
  41. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/amazon/amz_sku_query.json +0 -0
  42. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/patent/__init__.py +0 -0
  43. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/patent/patent_abstract_image.json +0 -0
  44. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/patent/patent_abstract_translated.json +0 -0
  45. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/patent/patent_bibliography.json +0 -0
  46. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/patent/patent_claim_data.json +0 -0
  47. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/patent/patent_claim_translated.json +0 -0
  48. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/patent/patent_description.json +0 -0
  49. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/patent/patent_description_translated.json +0 -0
  50. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/patent/patent_family.json +0 -0
  51. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/patent/patent_fulltext_image.json +0 -0
  52. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/patent/patent_image_search_multiple.json +0 -0
  53. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/patent/patent_image_search_single.json +0 -0
  54. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/patent/patent_legal_status.json +0 -0
  55. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/patent/patent_pdf.json +0 -0
  56. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/patent/patent_query_count.json +0 -0
  57. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/patent/patent_query_search.json +0 -0
  58. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/patent/patent_query_search_with_agg.json +0 -0
  59. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/patent/patent_semantic_search.json +0 -0
  60. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/__init__.py +0 -0
  61. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tk_expert_sale_show.json +0 -0
  62. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_commodity_detail.json +0 -0
  63. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_commodity_expert_draw_expert_trend.json +0 -0
  64. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_commodity_get_commodity_cat_tree.json +0 -0
  65. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_commodity_info_list.json +0 -0
  66. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_commodity_sales_trend.json +0 -0
  67. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_commodity_statistics_get_category_statistics.json +0 -0
  68. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_commodity_statistics_get_expert_statistics.json +0 -0
  69. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_commodity_statistics_get_price_statistics.json +0 -0
  70. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_commodity_statistics_get_total_statistics.json +0 -0
  71. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_commodity_voice_analyze.json +0 -0
  72. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_expert_basic_analyze.json +0 -0
  73. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_expert_category_analyze.json +0 -0
  74. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_expert_detail.json +0 -0
  75. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_expert_fans_analyze.json +0 -0
  76. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_expert_fans_portrait.json +0 -0
  77. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_expert_info_list.json +0 -0
  78. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_sale_channel_sale_channel.json +0 -0
  79. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_shop_commodity_account_list.json +0 -0
  80. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_shop_detail.json +0 -0
  81. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_shop_info_list.json +0 -0
  82. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_shop_market_info.json +0 -0
  83. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_shop_sales_trend.json +0 -0
  84. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_video_content.json +0 -0
  85. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_video_detail.json +0 -0
  86. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_video_info_list.json +0 -0
  87. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_video_new_video_summary.json +0 -0
  88. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_video_script_diy_query.json +0 -0
  89. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_video_voice_read.json +0 -0
  90. {openboost_cli-0.1.0/src/proboost_cli → openboost_cli-1.0.1/src/openboost_cli}/schemas/tiktok/tt_video_voice_summary.json +0 -0
  91. {openboost_cli-0.1.0 → openboost_cli-1.0.1}/src/openboost_cli.egg-info/dependency_links.txt +0 -0
@@ -0,0 +1,171 @@
1
+ Metadata-Version: 2.4
2
+ Name: openboost-cli
3
+ Version: 1.0.1
4
+ Summary: Unified CLI and Python client for Openboost TikTok, Patent, and Amazon MCP servers.
5
+ Author: Openboost CLI
6
+ License: MIT
7
+ Keywords: mcp,cli,openboost,proboost,tiktok,patent,amazon
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Programming Language :: Python :: 3.10
10
+ Classifier: Programming Language :: Python :: 3.11
11
+ Classifier: Programming Language :: Python :: 3.12
12
+ Classifier: Environment :: Console
13
+ Requires-Python: >=3.10
14
+ Description-Content-Type: text/markdown
15
+ Requires-Dist: httpx>=0.27
16
+ Requires-Dist: mcp>=1.24
17
+ Requires-Dist: rich>=13.0
18
+ Requires-Dist: typer>=0.12
19
+ Provides-Extra: dev
20
+ Requires-Dist: pytest>=8; extra == "dev"
21
+
22
+ # openboost-cli
23
+
24
+ 统一 Openboost MCP 命令行工具,包含 TikTok、Patent、Amazon 三套 MCP 的交互式菜单、快捷命令、通用调用和 Python 客户端。
25
+
26
+ 终端命令为 **`openboost`**(包名 `openboost-cli`)。
27
+
28
+ 完整使用说明见 **[使用文档.md](使用文档.md)**。
29
+
30
+ ## 安装
31
+
32
+ ### 从源码开发安装
33
+
34
+ ```bash
35
+ cd "/path/to/openboost-cli"
36
+ python3.12 -m venv .venv
37
+ source .venv/bin/activate
38
+ pip install --upgrade pip
39
+ pip install -e ".[dev]"
40
+ ```
41
+
42
+ ### 从离线安装包安装(wheel / 源码包)
43
+
44
+ 仓库内每次执行 `python -m build` 后,安装包位于 **`dist/`**:
45
+
46
+ | 文件 | 说明 |
47
+ |------|------|
48
+ | `openboost_cli-<版本>-py3-none-any.whl` | 推荐:纯 Python,任意平台 Python 3.10+ 可用 |
49
+ | `openboost_cli-<版本>.tar.gz` | 源码分发包,`pip` 会本地构建后安装 |
50
+
51
+ 在**任意**虚拟环境或全局环境中(需 Python ≥ 3.10,且能访问 PyPI 以下载依赖 `httpx`、`mcp`、`rich`、`typer`):
52
+
53
+ ```bash
54
+ pip install --upgrade pip
55
+ pip install "/path/to/openboost-cli/dist/openboost_cli-1.0.1-py3-none-any.whl"
56
+ ```
57
+
58
+ 若机器**完全离线**,需事先在同一 Python 版本下准备好依赖的 wheel,或使用带依赖缓存的 `pip download`,再 `pip install --no-index` 指向本地目录;此处与常规 Python 离线安装流程相同。
59
+
60
+ 安装后命令为:
61
+
62
+ ```bash
63
+ openboost --help
64
+ ```
65
+
66
+ ### 自行打包安装包
67
+
68
+ 在 `openboost-cli` 项目根目录:
69
+
70
+ ```bash
71
+ pip install build
72
+ python -m build
73
+ ```
74
+
75
+ 产物写入 **`dist/`**(`*.whl` 与 `*.tar.gz`),可将整个 `dist` 目录或单个文件拷贝给其他环境安装。
76
+
77
+ ## 配置密钥
78
+
79
+ 三套 MCP 共用同一个密钥时:
80
+
81
+ ```bash
82
+ openboost config set --secret-key "你的密钥"
83
+ ```
84
+
85
+ 也可以只配置某一个 MCP:
86
+
87
+ ```bash
88
+ openboost config set --mcp patent --secret-key "你的密钥"
89
+ openboost config set --mcp amazon --base-url "http://mcp.microdata-inc.com/mcp-servers/proboost-amazon-mcp"
90
+ ```
91
+
92
+ 环境变量也支持:
93
+
94
+ ```bash
95
+ export OPENBOOST_SECRET_KEY="通用密钥"
96
+ export OPENBOOST_TIKTOK_SECRET_KEY="TikTok 专用密钥"
97
+ export OPENBOOST_PATENT_SECRET_KEY="Patent 专用密钥"
98
+ export OPENBOOST_AMAZON_SECRET_KEY="Amazon 专用密钥"
99
+ ```
100
+
101
+ ## 通用命令
102
+
103
+ ```bash
104
+ openboost # 交互式菜单
105
+ openboost list # 列出全部 55 个工具
106
+ openboost docs patent patent_query_search
107
+
108
+ openboost call tiktok tt_video_content \
109
+ --set countryRegion=美国 \
110
+ --set videoId=7587942790298979614
111
+
112
+ openboost call patent patent_query_count \
113
+ --set query_text="TACD: virtual reality"
114
+
115
+ openboost call amazon amz_product_selection \
116
+ --set webSiteId=1 \
117
+ --set pages=1 \
118
+ --set pagesSize=10
119
+ ```
120
+
121
+ ## 快捷命令示例
122
+
123
+ TikTok:
124
+
125
+ ```bash
126
+ openboost tiktok commodity category-tree
127
+ openboost tiktok video content 7587942790298979614 --country 美国
128
+ openboost tiktok shop list --data-period last30d --country 美国
129
+ ```
130
+
131
+ Patent:
132
+
133
+ ```bash
134
+ openboost patent search count "TACD: virtual reality"
135
+ openboost patent search query "TACD: virtual reality" --limit 10
136
+ openboost patent detail bibliography --patent-number US11205304B2
137
+ openboost patent image-search single "https://example.com/image.jpg" --model 1 --patent-type D
138
+ ```
139
+
140
+ Amazon:
141
+
142
+ ```bash
143
+ openboost amazon product selection --site 1 --pages 1 --pages-size 10
144
+ openboost amazon product sku B0EXAMPLE --site 1
145
+ openboost amazon hot cat-tree --site 1 --rank-type "Best Seller"
146
+ ```
147
+
148
+ 复杂筛选条件可追加 `key=value`:
149
+
150
+ ```bash
151
+ openboost amazon product selection --site 1 minPrice=10 maxPrice=30 sortField=sku_sales_last_30d sortOrder=desc
152
+ ```
153
+
154
+ ## Python 客户端
155
+
156
+ ```python
157
+ from openboost_cli import Openboost
158
+
159
+ pb = Openboost()
160
+ content = pb.tiktok.tt_video_content(countryRegion="美国", videoId="7587942790298979614")
161
+ count = pb.patent.patent_query_count(query_text="TACD: virtual reality")
162
+ items = pb.amazon.amz_product_selection(webSiteId="1", pages=1, pagesSize=10)
163
+ ```
164
+
165
+ ## 测试
166
+
167
+ ```bash
168
+ python -m pytest
169
+ openboost --help
170
+ openboost list
171
+ ```
@@ -0,0 +1,150 @@
1
+ # openboost-cli
2
+
3
+ 统一 Openboost MCP 命令行工具,包含 TikTok、Patent、Amazon 三套 MCP 的交互式菜单、快捷命令、通用调用和 Python 客户端。
4
+
5
+ 终端命令为 **`openboost`**(包名 `openboost-cli`)。
6
+
7
+ 完整使用说明见 **[使用文档.md](使用文档.md)**。
8
+
9
+ ## 安装
10
+
11
+ ### 从源码开发安装
12
+
13
+ ```bash
14
+ cd "/path/to/openboost-cli"
15
+ python3.12 -m venv .venv
16
+ source .venv/bin/activate
17
+ pip install --upgrade pip
18
+ pip install -e ".[dev]"
19
+ ```
20
+
21
+ ### 从离线安装包安装(wheel / 源码包)
22
+
23
+ 仓库内每次执行 `python -m build` 后,安装包位于 **`dist/`**:
24
+
25
+ | 文件 | 说明 |
26
+ |------|------|
27
+ | `openboost_cli-<版本>-py3-none-any.whl` | 推荐:纯 Python,任意平台 Python 3.10+ 可用 |
28
+ | `openboost_cli-<版本>.tar.gz` | 源码分发包,`pip` 会本地构建后安装 |
29
+
30
+ 在**任意**虚拟环境或全局环境中(需 Python ≥ 3.10,且能访问 PyPI 以下载依赖 `httpx`、`mcp`、`rich`、`typer`):
31
+
32
+ ```bash
33
+ pip install --upgrade pip
34
+ pip install "/path/to/openboost-cli/dist/openboost_cli-1.0.1-py3-none-any.whl"
35
+ ```
36
+
37
+ 若机器**完全离线**,需事先在同一 Python 版本下准备好依赖的 wheel,或使用带依赖缓存的 `pip download`,再 `pip install --no-index` 指向本地目录;此处与常规 Python 离线安装流程相同。
38
+
39
+ 安装后命令为:
40
+
41
+ ```bash
42
+ openboost --help
43
+ ```
44
+
45
+ ### 自行打包安装包
46
+
47
+ 在 `openboost-cli` 项目根目录:
48
+
49
+ ```bash
50
+ pip install build
51
+ python -m build
52
+ ```
53
+
54
+ 产物写入 **`dist/`**(`*.whl` 与 `*.tar.gz`),可将整个 `dist` 目录或单个文件拷贝给其他环境安装。
55
+
56
+ ## 配置密钥
57
+
58
+ 三套 MCP 共用同一个密钥时:
59
+
60
+ ```bash
61
+ openboost config set --secret-key "你的密钥"
62
+ ```
63
+
64
+ 也可以只配置某一个 MCP:
65
+
66
+ ```bash
67
+ openboost config set --mcp patent --secret-key "你的密钥"
68
+ openboost config set --mcp amazon --base-url "http://mcp.microdata-inc.com/mcp-servers/proboost-amazon-mcp"
69
+ ```
70
+
71
+ 环境变量也支持:
72
+
73
+ ```bash
74
+ export OPENBOOST_SECRET_KEY="通用密钥"
75
+ export OPENBOOST_TIKTOK_SECRET_KEY="TikTok 专用密钥"
76
+ export OPENBOOST_PATENT_SECRET_KEY="Patent 专用密钥"
77
+ export OPENBOOST_AMAZON_SECRET_KEY="Amazon 专用密钥"
78
+ ```
79
+
80
+ ## 通用命令
81
+
82
+ ```bash
83
+ openboost # 交互式菜单
84
+ openboost list # 列出全部 55 个工具
85
+ openboost docs patent patent_query_search
86
+
87
+ openboost call tiktok tt_video_content \
88
+ --set countryRegion=美国 \
89
+ --set videoId=7587942790298979614
90
+
91
+ openboost call patent patent_query_count \
92
+ --set query_text="TACD: virtual reality"
93
+
94
+ openboost call amazon amz_product_selection \
95
+ --set webSiteId=1 \
96
+ --set pages=1 \
97
+ --set pagesSize=10
98
+ ```
99
+
100
+ ## 快捷命令示例
101
+
102
+ TikTok:
103
+
104
+ ```bash
105
+ openboost tiktok commodity category-tree
106
+ openboost tiktok video content 7587942790298979614 --country 美国
107
+ openboost tiktok shop list --data-period last30d --country 美国
108
+ ```
109
+
110
+ Patent:
111
+
112
+ ```bash
113
+ openboost patent search count "TACD: virtual reality"
114
+ openboost patent search query "TACD: virtual reality" --limit 10
115
+ openboost patent detail bibliography --patent-number US11205304B2
116
+ openboost patent image-search single "https://example.com/image.jpg" --model 1 --patent-type D
117
+ ```
118
+
119
+ Amazon:
120
+
121
+ ```bash
122
+ openboost amazon product selection --site 1 --pages 1 --pages-size 10
123
+ openboost amazon product sku B0EXAMPLE --site 1
124
+ openboost amazon hot cat-tree --site 1 --rank-type "Best Seller"
125
+ ```
126
+
127
+ 复杂筛选条件可追加 `key=value`:
128
+
129
+ ```bash
130
+ openboost amazon product selection --site 1 minPrice=10 maxPrice=30 sortField=sku_sales_last_30d sortOrder=desc
131
+ ```
132
+
133
+ ## Python 客户端
134
+
135
+ ```python
136
+ from openboost_cli import Openboost
137
+
138
+ pb = Openboost()
139
+ content = pb.tiktok.tt_video_content(countryRegion="美国", videoId="7587942790298979614")
140
+ count = pb.patent.patent_query_count(query_text="TACD: virtual reality")
141
+ items = pb.amazon.amz_product_selection(webSiteId="1", pages=1, pagesSize=10)
142
+ ```
143
+
144
+ ## 测试
145
+
146
+ ```bash
147
+ python -m pytest
148
+ openboost --help
149
+ openboost list
150
+ ```
@@ -4,25 +4,18 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "openboost-cli"
7
- description = "Unified CLI and Python client for Proboost TikTok, Patent, and Amazon MCP servers."
7
+ description = "Unified CLI and Python client for Openboost TikTok, Patent, and Amazon MCP servers."
8
8
  readme = "README.md"
9
9
  requires-python = ">=3.10"
10
- license = "MIT"
11
- license-files = ["LICENSE"]
12
- authors = [{ name = "Proboost CLI" }]
10
+ license = { text = "MIT" }
11
+ authors = [{ name = "Openboost CLI" }]
13
12
  keywords = ["mcp", "cli", "openboost", "proboost", "tiktok", "patent", "amazon"]
14
13
  classifiers = [
15
- "Development Status :: 4 - Beta",
16
- "Environment :: Console",
17
- "Intended Audience :: Developers",
18
- "Operating System :: OS Independent",
19
14
  "Programming Language :: Python :: 3",
20
- "Programming Language :: Python :: 3 :: Only",
21
15
  "Programming Language :: Python :: 3.10",
22
16
  "Programming Language :: Python :: 3.11",
23
17
  "Programming Language :: Python :: 3.12",
24
- "Topic :: Software Development :: Libraries :: Python Modules",
25
- "Topic :: Utilities",
18
+ "Environment :: Console",
26
19
  ]
27
20
  dynamic = ["version"]
28
21
  dependencies = [
@@ -33,10 +26,10 @@ dependencies = [
33
26
  ]
34
27
 
35
28
  [project.optional-dependencies]
36
- dev = ["pytest>=8", "build>=1.2", "twine>=6.0"]
29
+ dev = ["pytest>=8"]
37
30
 
38
31
  [project.scripts]
39
- proboost = "proboost_cli.cli.main:main"
32
+ openboost = "openboost_cli.cli.main:main"
40
33
 
41
34
  [tool.setuptools]
42
35
  package-dir = { "" = "src" }
@@ -45,20 +38,14 @@ package-dir = { "" = "src" }
45
38
  where = ["src"]
46
39
 
47
40
  [tool.setuptools.package-data]
48
- proboost_cli = [
41
+ openboost_cli = [
49
42
  "schemas/tiktok/*.json",
50
43
  "schemas/patent/*.json",
51
44
  "schemas/amazon/*.json",
52
45
  ]
53
46
 
54
47
  [tool.setuptools.dynamic]
55
- version = { attr = "proboost_cli.__version__" }
48
+ version = { attr = "openboost_cli.__version__" }
56
49
 
57
50
  [tool.pytest.ini_options]
58
51
  testpaths = ["tests"]
59
-
60
- [[tool.uv.index]]
61
- name = "testpypi"
62
- url = "https://test.pypi.org/simple/"
63
- publish-url = "https://test.pypi.org/legacy/"
64
- explicit = true
@@ -1,6 +1,6 @@
1
- """Unified Proboost MCP CLI and Python client."""
1
+ """Unified Openboost MCP CLI and Python client."""
2
2
 
3
- __version__ = "0.1.0"
3
+ __version__ = "1.0.1"
4
4
 
5
5
  DEFAULT_BASE_URLS = {
6
6
  "tiktok": "http://mcp.microdata-inc.com/mcp-servers/proboost-tiktok-mcp",
@@ -16,6 +16,6 @@ MCP_LABELS = {
16
16
 
17
17
  MCP_NAMES = tuple(DEFAULT_BASE_URLS.keys())
18
18
 
19
- from .client import Proboost
19
+ from .client import Openboost
20
20
 
21
- __all__ = ["DEFAULT_BASE_URLS", "MCP_LABELS", "MCP_NAMES", "Proboost", "__version__"]
21
+ __all__ = ["DEFAULT_BASE_URLS", "MCP_LABELS", "MCP_NAMES", "Openboost", "__version__"]
@@ -8,13 +8,13 @@ from rich.console import Console
8
8
  from rich.panel import Panel
9
9
  from rich.prompt import Prompt
10
10
 
11
- from proboost_cli import MCP_LABELS, MCP_NAMES
12
- from proboost_cli.coerce_args import coerce_argument_value
13
- from proboost_cli.config import effective_secret_and_base
14
- from proboost_cli.mcp_client import extract_result_text, invoke_tool_async
15
- from proboost_cli.parse_result import decode_embedded_payload
16
- from proboost_cli.registry import DOMAIN_LABELS, DOMAIN_TOOLS, TOOLS
17
- from proboost_cli.schemas_loader import load_tool_definitions, tool_schema_properties
11
+ from openboost_cli import MCP_LABELS, MCP_NAMES
12
+ from openboost_cli.coerce_args import coerce_argument_value
13
+ from openboost_cli.config import effective_secret_and_base
14
+ from openboost_cli.mcp_client import extract_result_text, invoke_tool_async
15
+ from openboost_cli.parse_result import decode_embedded_payload
16
+ from openboost_cli.registry import DOMAIN_LABELS, DOMAIN_TOOLS, TOOLS
17
+ from openboost_cli.schemas_loader import load_tool_definitions, tool_schema_properties
18
18
 
19
19
  console = Console()
20
20
 
@@ -25,8 +25,8 @@ def run_interactive(
25
25
  base_url: str | None = None,
26
26
  ) -> None:
27
27
  console.print(Panel(
28
- "[bold cyan]Proboost CLI[/bold cyan]\n统一调用 TikTok / Patent / Amazon MCP",
29
- title="proboost",
28
+ "[bold cyan]Openboost CLI[/bold cyan]\n统一调用 TikTok / Patent / Amazon MCP",
29
+ title="openboost",
30
30
  border_style="cyan",
31
31
  ))
32
32
 
@@ -85,7 +85,7 @@ def run_interactive(
85
85
 
86
86
  secret, resolved_base = effective_secret_and_base(mcp, secret_key=secret_key, base_url=base_url)
87
87
  if not secret:
88
- console.print("[red]缺少 secret-key。请运行 proboost config set --secret-key ...[/red]")
88
+ console.print("[red]缺少 secret-key。请运行 openboost config set --secret-key ...[/red]")
89
89
  raise SystemExit(1)
90
90
 
91
91
  try:
@@ -11,20 +11,21 @@ import typer
11
11
  from rich.console import Console
12
12
  from rich.table import Table
13
13
 
14
- from proboost_cli import MCP_LABELS, MCP_NAMES, __version__
15
- from proboost_cli.cli import interactive
16
- from proboost_cli.coerce_args import merge_tool_arguments_json
17
- from proboost_cli.config import (
14
+ from openboost_cli import MCP_LABELS, MCP_NAMES, __version__
15
+ from openboost_cli.cli import interactive
16
+ from openboost_cli.coerce_args import merge_tool_arguments_json
17
+ from openboost_cli.config import (
18
+ config_path,
18
19
  effective_secret_and_base,
19
20
  load_config,
20
21
  mask_secret,
21
22
  normalize_mcp_name,
22
23
  update_config,
23
24
  )
24
- from proboost_cli.mcp_client import extract_result_text, invoke_tool_async
25
- from proboost_cli.parse_result import decode_embedded_payload
26
- from proboost_cli.registry import DOMAIN_LABELS, DOMAIN_TOOLS, TOOLS
27
- from proboost_cli.schemas_loader import load_tool_definitions, tool_schema_properties, tool_schema_required
25
+ from openboost_cli.mcp_client import extract_result_text, invoke_tool_async
26
+ from openboost_cli.parse_result import decode_embedded_payload
27
+ from openboost_cli.registry import DOMAIN_LABELS, DOMAIN_TOOLS, TOOLS
28
+ from openboost_cli.schemas_loader import load_tool_definitions, tool_schema_properties, tool_schema_required
28
29
 
29
30
  if sys.stdout and hasattr(sys.stdout, "reconfigure"):
30
31
  sys.stdout.reconfigure(encoding="utf-8", errors="replace")
@@ -32,8 +33,8 @@ if sys.stdout and hasattr(sys.stdout, "reconfigure"):
32
33
  console = Console()
33
34
 
34
35
  app = typer.Typer(
35
- name="proboost",
36
- help="Proboost CLI — 统一调用 TikTok / Patent / Amazon MCP",
36
+ name="openboost",
37
+ help="Openboost CLI — 统一调用 TikTok / Patent / Amazon MCP",
37
38
  no_args_is_help=False,
38
39
  add_completion=False,
39
40
  )
@@ -127,7 +128,7 @@ def _run_tool(mcp: str, tool_name: str, arguments: dict[str, Any], *, verbatim:
127
128
  )
128
129
  if not secret:
129
130
  console.print(
130
- f"[red]缺少 {MCP_LABELS[mcp]} secret-key。[/red]请设置 PROBOOST_SECRET_KEY 或运行 proboost config set --secret-key ..."
131
+ f"[red]缺少 {MCP_LABELS[mcp]} secret-key。[/red]请设置 OPENBOOST_SECRET_KEY 或运行 openboost config set --secret-key ..."
131
132
  )
132
133
  raise typer.Exit(1)
133
134
  try:
@@ -183,15 +184,15 @@ def config_set_cmd(
183
184
  def config_show_cmd() -> None:
184
185
  """查看当前生效配置(密钥脱敏)"""
185
186
  cfg = load_config()
186
- console.print(f"config file: {Path.home() / '.config/proboost/config.json'}")
187
+ console.print(f"config file: {config_path()}")
187
188
  if cfg.get("secret_key"):
188
189
  console.print(f"global secret_key: {mask_secret(str(cfg['secret_key']))}")
189
190
  for mcp in MCP_NAMES:
190
191
  secret, base = effective_secret_and_base(mcp)
191
192
  console.print(f"{mcp:7} base_url : {base}")
192
193
  console.print(f"{mcp:7} secret_key : {mask_secret(secret)}")
193
- if os.environ.get("PROBOOST_SECRET_KEY"):
194
- console.print("env PROBOOST_SECRET_KEY is set")
194
+ if os.environ.get("OPENBOOST_SECRET_KEY") or os.environ.get("PROBOOST_SECRET_KEY"):
195
+ console.print("env OPENBOOST_SECRET_KEY is set")
195
196
 
196
197
 
197
198
  @app.command("list")
@@ -2,17 +2,17 @@ from __future__ import annotations
2
2
 
3
3
  from typing import Any
4
4
 
5
- from proboost_cli.mcp_client import McpClient
5
+ from openboost_cli.mcp_client import McpClient
6
6
 
7
7
 
8
- class Proboost:
9
- """Unified Python client for Proboost MCP servers.
8
+ class Openboost:
9
+ """Unified Python client for Openboost MCP servers.
10
10
 
11
11
  Usage:
12
12
 
13
- from proboost_cli import Proboost
13
+ from openboost_cli import Openboost
14
14
 
15
- pb = Proboost()
15
+ pb = Openboost()
16
16
  pb.tiktok.tt_video_content(countryRegion="美国", videoId="...")
17
17
  pb.patent.patent_query_search(query_text="TACD: virtual reality")
18
18
  pb.amazon.amz_product_selection(webSiteId="1")
@@ -5,23 +5,27 @@ import os
5
5
  from pathlib import Path
6
6
  from typing import Any
7
7
 
8
- from proboost_cli import DEFAULT_BASE_URLS, MCP_NAMES
8
+ from openboost_cli import DEFAULT_BASE_URLS, MCP_NAMES
9
9
 
10
10
 
11
11
  def config_path() -> Path:
12
- env = os.environ.get("PROBOOST_CONFIG", "").strip()
12
+ env = os.environ.get("OPENBOOST_CONFIG", "").strip() or os.environ.get("PROBOOST_CONFIG", "").strip()
13
13
  if env:
14
14
  return Path(env).expanduser()
15
15
  xdg = os.environ.get("XDG_CONFIG_HOME", "").strip()
16
16
  if xdg:
17
- return Path(xdg) / "proboost" / "config.json"
18
- return Path.home() / ".config" / "proboost" / "config.json"
17
+ return Path(xdg) / "openboost" / "config.json"
18
+ return Path.home() / ".config" / "openboost" / "config.json"
19
19
 
20
20
 
21
21
  def load_config() -> dict[str, Any]:
22
22
  path = config_path()
23
23
  if not path.is_file():
24
- return {}
24
+ legacy = Path.home() / ".config" / "proboost" / "config.json"
25
+ if legacy.is_file():
26
+ path = legacy
27
+ else:
28
+ return {}
25
29
  text = path.read_text(encoding="utf-8").strip()
26
30
  if not text:
27
31
  return {}
@@ -42,7 +46,11 @@ def normalize_mcp_name(name: str) -> str:
42
46
 
43
47
 
44
48
  def _env_prefix(mcp: str) -> str:
45
- return f"PROBOOST_{mcp.upper()}"
49
+ return f"OPENBOOST_{mcp.upper()}"
50
+
51
+
52
+ def _env(name: str) -> str:
53
+ return os.environ.get(name, "").strip() or os.environ.get(name.replace("OPENBOOST_", "PROBOOST_"), "").strip()
46
54
 
47
55
 
48
56
  def effective_secret_and_base(
@@ -60,14 +68,14 @@ def effective_secret_and_base(
60
68
  prefix = _env_prefix(mcp)
61
69
  secret = (
62
70
  secret_key
63
- or os.environ.get(f"{prefix}_SECRET_KEY", "").strip()
64
- or os.environ.get("PROBOOST_SECRET_KEY", "").strip()
71
+ or _env(f"{prefix}_SECRET_KEY")
72
+ or _env("OPENBOOST_SECRET_KEY")
65
73
  or str(mcp_cfg.get("secret_key", "")).strip()
66
74
  or str(cfg.get("secret_key", "")).strip()
67
75
  )
68
76
  base = (
69
77
  base_url
70
- or os.environ.get(f"{prefix}_BASE_URL", "").strip()
78
+ or _env(f"{prefix}_BASE_URL")
71
79
  or str(mcp_cfg.get("base_url", "")).strip()
72
80
  or DEFAULT_BASE_URLS[mcp]
73
81
  ).rstrip("/")
@@ -10,9 +10,9 @@ from mcp import types as mtypes
10
10
  from mcp.client.streamable_http import streamable_http_client
11
11
  from mcp.shared._httpx_utils import create_mcp_http_client
12
12
 
13
- from proboost_cli.config import effective_secret_and_base, normalize_mcp_name
14
- from proboost_cli.parse_result import decode_embedded_payload
15
- from proboost_cli.schemas_loader import load_tool_definitions
13
+ from openboost_cli.config import effective_secret_and_base, normalize_mcp_name
14
+ from openboost_cli.parse_result import decode_embedded_payload
15
+ from openboost_cli.schemas_loader import load_tool_definitions
16
16
 
17
17
 
18
18
  def extract_result_text(result: mtypes.CallToolResult) -> str:
@@ -47,7 +47,7 @@ async def invoke_tool_async(
47
47
 
48
48
 
49
49
  class McpClient:
50
- """Dynamic Python client for one Proboost MCP server."""
50
+ """Dynamic Python client for one Openboost MCP server."""
51
51
 
52
52
  def __init__(
53
53
  self,
@@ -66,7 +66,7 @@ class McpClient:
66
66
  )
67
67
  if not resolved_secret:
68
68
  raise ValueError(
69
- f"缺少 {self.mcp} secret-key。请设置 PROBOOST_SECRET_KEYPROBOOST_{self.mcp.upper()}_SECRET_KEY。"
69
+ f"缺少 {self.mcp} secret-key。请设置 OPENBOOST_SECRET_KEYOPENBOOST_{self.mcp.upper()}_SECRET_KEY。"
70
70
  )
71
71
  self.secret_key = resolved_secret
72
72
  self.base_url = resolved_base
@@ -2,8 +2,8 @@ from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
4
 
5
- from proboost_cli import MCP_LABELS, MCP_NAMES
6
- from proboost_cli.schemas_loader import load_tool_definitions, tool_schema_required
5
+ from openboost_cli import MCP_LABELS, MCP_NAMES
6
+ from openboost_cli.schemas_loader import load_tool_definitions, tool_schema_required
7
7
 
8
8
 
9
9
  @dataclass(frozen=True)
@@ -0,0 +1 @@
1
+ """Bundled MCP tool schemas for Openboost servers."""
@@ -4,13 +4,13 @@ import json
4
4
  from importlib import resources
5
5
  from typing import Any
6
6
 
7
- from proboost_cli import MCP_NAMES
7
+ from openboost_cli import MCP_NAMES
8
8
 
9
9
 
10
10
  def _tools_pkg(mcp: str) -> str:
11
11
  if mcp not in MCP_NAMES:
12
12
  raise ValueError(f"Unknown MCP: {mcp}")
13
- return f"proboost_cli.schemas.{mcp}"
13
+ return f"openboost_cli.schemas.{mcp}"
14
14
 
15
15
 
16
16
  def iter_tool_manifests(mcp: str) -> list[tuple[str, dict[str, Any]]]: