关于 Pirate Ship by Cotlet
Pirate Ship by Cotlet 是面向技术用户的自托管 Python API 和 MCP 服务,用于处理小型包裹寄送流程。它涵盖费率、标签草稿、货件、追踪和报告,但不包含会花费或退款的工具。
主要功能
- 01比较 USPS 和 UPS 费率
- 02创建标签草稿和批次
- 03查看货件与追踪信息
- 04查看报告和承运商调整
- 05导入商店订单并管理设置
适用场景
- 01比较包裹的寄送费率
- 02从 CSV 准备未付款标签批次
- 03查找尚无承运商扫描的货件
- 04查看运费支出和调整
MCP 相关
通过 stdio 或流式 HTTP 向 MCP 客户端提供 Pirate Ship 寄送和账户工具。此版本不包含会花费或退款的工具。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://cotlet.dev/mcp/v1/pirate-ship/connectclaude mcp add --transport http dev-cotlet-pirate-ship https://cotlet.dev/mcp/v1/pirate-ship/connect{"mcpServers":{"dev-cotlet-pirate-ship":{"type":"http","url":"https://cotlet.dev/mcp/v1/pirate-ship/connect"}}}在 Cursor 中打开{"servers":{"dev-cotlet-pirate-ship":{"type":"http","url":"https://cotlet.dev/mcp/v1/pirate-ship/connect"}}}在 VS Code 中打开{"mcpServers":{"dev-cotlet-pirate-ship":{"type":"http","url":"https://cotlet.dev/mcp/v1/pirate-ship/connect"}}}{"mcpServers":{"dev-cotlet-pirate-ship":{"serverUrl":"https://cotlet.dev/mcp/v1/pirate-ship/connect"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
https://cotlet.dev/mcp/v1/pirate-ship/connecthttps://cotlet.dev/mcp/v1/pirate-ship需要授权工具
详细介绍
Pirate Ship API 和 MCP 服务,可自托管
一个 Pirate Ship API 和一个 Pirate Ship MCP 服务,使用 Python 在你自己的电脑上运行,并在你自己的 Google Chrome 会话中工作。我们在 Cotlet 的生产环境中运行的 57 个 Pirate Ship 工具中,这里提供了 51 个:USPS 和 UPS 运费、标签和批次草稿、标签下载、SCAN Forms、货件和追踪、报告、商店订单导入、发货地址、已保存的包裹、追踪邮件和标签设置。涉及付款或退款的 6 个工具不包含在此版本中。
Pirate Ship 没有公开 API,也没有官方 MCP 服务。这个代码库同时提供两者:
- 面向 Claude Code、Claude Desktop、Cursor、Codex 和任何 MCP 客户端的 MCP 服务,支持 stdio 或 HTTP。设置
- 位于
http://127.0.0.1:8787/api/v1/pirate-ship的 REST API,OpenAPI 文档位于/docs。设置 - Python:
call("get_rates", to_zip="10001", weight_oz=16),以及examples/中的 11 个现成脚本。
本项目面向希望自行运行的技术人员,仅限非商业用途(许可证)。如果你希望它在服务器上全天候运行,在 Pirate Ship 更改其应用后仍能正常工作,或供团队或企业使用,请使用 cotlet.dev 上的托管版本。
git clone https://github.com/cotletdev/pirate-ship-api-mcp-server.git && cd pirate-ship-api-mcp-server
python3 -m venv .venv && . .venv/bin/activate && pip install -e .
pirate-ship-mcp connect # reads your Pirate Ship session from Chrome
pirate-ship-mcp call get_rates to_zip=10001 weight_oz=16
claude mcp add pirate-ship -- "$PWD/.venv/bin/pirate-ship-mcp" mcp
目录
- 工作原理
- 要求
- 安装
- 连接你的 Chrome
- MCP 服务
- REST API
- Python 和示例脚本
- 全部 51 个工具
- 配置
- 安全与 Pirate Ship 账户
- 错误
- 自托管还是托管版
- 常见问题
- 许可证
工作原理
AI agent (MCP) / script (REST, Python) ──▶ pirate-ship-mcp on your computer ──your cookies──▶ ship.pirateship.com
▲
pirate-ship-mcp connect ──────┘ reads them once from your Chrome (DevTools Protocol)
- 你像往常一样,在自己的 Chrome 中登录 Pirate Ship。
pirate-ship-mcp connect通过 Chrome DevTools Protocol 连接到该 Chrome,读取 pirateship.com 的 Cookie 和 Chrome 的时区,并将它们保存到~/.config/pirate-ship-api-mcp/session.json,该文件仅对你的用户可读。它不会查看或存储你的密码。- 每次工具调用都会使用 Pirate Ship 自己的网页应用发送到
ship.pirateship.com/api/graphql的某个 GraphQL 操作,并携带这些 Cookie,通过 curl_cffi 发送;它会复制 Chrome 的 TLS 指纹。整个过程不会运行无头浏览器。
Pirate Ship 的网页应用会将每个操作作为持久化查询发送:包含操作名称和查询文本的 sha256。工具只能发送 operations.py 中列出的操作,账户、密码、付款方式和身份相关操作均不在列表中。如果 Pirate Ship 更改了某个已列出的查询,在我们记录新的哈希之前,工具会回复“Pirate Ship changed its app”。
Pirate Ship 的会话 Cookie 大约一天后过期,并会在使用时续期。当 Pirate Ship 将你登出时,如果 Chrome 已打开远程调试,服务会再次从 Chrome 读取 Cookie。登录时请勾选“保持登录”,这样 Chrome 就会在你下次访问时仍保持登录状态。
要求
- Python 3.11 或更高版本。
- Google Chrome 144 或更高版本,并已登录 Pirate Ship。任何带有调试端口的 Chrome 或 Chromium 均可。
- macOS、Linux 或 Windows。
- 拥有 Pirate Ship 账户,并设置了发货地址。费率、草稿、报告和设置无需其他条件。购买标签需要账户余额或付款方式,且须在 Pirate Ship 中购买。
安装
git clone https://github.com/cotletdev/pirate-ship-api-mcp-server.git
cd pirate-ship-api-mcp-server
python3 -m venv .venv
. .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e .
pirate-ship-mcp --version
使用 uv:uv venv && uv pip install -e .,然后运行 uv run pirate-ship-mcp ...。
想用 AI Agent(Claude Code、Codex、Cursor)完成设置?在此文件夹中打开项目,并让它设置代码库:AGENTS.md 会告知它每个步骤,而且它只会在 Chrome 中进行操作时询问你。
更新:git pull && pip install -e .。我们会将托管版 Pirate Ship 工具的每项更改都复制到此代码库中。
连接 Chrome
选项 A:日常使用的 Chrome(推荐)
-
在 Chrome 中打开
chrome://inspect/#remote-debugging,然后开启远程调试。之后,Chrome 会接受此电脑上程序发起的 DevTools 连接,并在每次连接前询问你。 -
确认已登录 ship.pirateship.com。
-
运行:
pirate-ship-mcp connect -
Chrome 会询问是否允许连接。点击允许。
Saved 32 Pirate Ship cookies to /Users/you/.config/pirate-ship-api-mcp/session.json
Signed in to Pirate Ship as Linda Morales ([email protected])
如果希望 Pirate Ship 将你登出后,服务能自动检测到新会话,请保持远程调试开启。Cookie 只有一天有效期,因此这种情况比大多数应用更常见。
connect 会在 Chrome 默认的配置文件夹中查找 DevToolsActivePort 文件。对于 Chrome Beta、Canary 或自定义配置文件夹,请传入 --profile-dir "<folder>"。
选项 B:使用带有调试端口的 Chrome
Chrome 不会在默认配置文件上开放调试端口,因此请启动一个独立实例,在其中登录 Pirate Ship 一次,然后连接到该实例:
# macOS
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --remote-debugging-port=9222 --user-data-dir="$HOME/.chrome-pirate-ship"
# Linux
google-chrome --remote-debugging-port=9222 --user-data-dir="$HOME/.chrome-pirate-ship"
# Windows
"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222 --user-data-dir="%USERPROFILE%\.chrome-pirate-ship"
pirate-ship-mcp connect --cdp http://127.0.0.1:9222
--cdp 也接受 ws:// DevTools URL,例如通过 SSH 隧道连接到另一台机器上的 Chrome。
选项 C:手动粘贴 Cookie
对于没有 Chrome 的服务:在 Chrome 中打开 ship.pirateship.com 的 DevTools,依次选择 **Application > Cookies > https://ship.pirateship.com**,复制 pirate_id_f0fecf84 的值,然后:
pirate-ship-mcp connect --token # paste it, input is hidden
# or, without a session file:
export PIRATE_SHIP_AUTH_TOKEN=...
粘贴的 Cookie 不会自动刷新,而且如果不使用,大约一天后就会失效。Pirate Ship 将你登出后,请粘贴新的 Cookie。
随时检查会话:
pirate-ship-mcp status
MCP 服务
MCP 服务会列出每个工具及其输入架构、为 Agent 编写的说明和提示:读取工具会标记为只读,删除内容或更改收件人收到内容的工具也会标记出来,以便客户端在运行前征求你的确认。
Claude Code
claude mcp add pirate-ship -- /path/to/pirate-ship-api-mcp-server/.venv/bin/pirate-ship-mcp mcp
# read only:
claude mcp add pirate-ship -- /path/to/pirate-ship-api-mcp-server/.venv/bin/pirate-ship-mcp mcp --read-only
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json(macOS)或 %APPDATA%\Claude\claude_desktop_config.json(Windows):
{
"mcpServers": {
"pirate-ship": {
"command": "/path/to/pirate-ship-api-mcp-server/.venv/bin/pirate-ship-mcp",
"args": ["mcp"]
}
}
}
Cursor
~/.cursor/mcp.json,与 Claude Desktop 使用相同的配置块。可直接使用的副本位于 mcp.json。
Codex
~/.codex/config.toml:
[mcp_servers.pirate-ship]
command = "/path/to/pirate-ship-api-mcp-server/.venv/bin/pirate-ship-mcp"
args = ["mcp"]
通过 HTTP 连接
pirate-ship-mcp serve 也会通过可流式传输的 HTTP,在 http://127.0.0.1:8787/mcp 提供 MCP 服务,适用于接受 URL 的客户端:
pirate-ship-mcp serve
claude mcp add --transport http pirate-ship http://127.0.0.1:8787/mcp
然后可以向 Agent 提出类似这样的问题:
一个 2 lb、12x10x6 的箱子,用 USPS 和 UPS 寄到邮编 94103 要多少钱?按价格从低到高排列。
根据 orders.csv 和我的“Small box”保存的包裹创建一批草稿,并按组显示费率。
过去 10 天的哪些标签还没有承运商扫描记录?
我在 10 月花了多少钱购买标签?承运商调整了哪些费用?
REST API
pirate-ship-mcp serve # http://127.0.0.1:8787, MCP at /mcp, docs at /docs
每个工具在 /api/v1/pirate-ship 下都有自己的路由,与 cotlet.dev 上托管 API 的路径相同,因此针对其中一个编写的代码也适用于另一个。路径部分和查询字符串会作为参数,JSON 请求体则提供其余参数。
curl 'http://127.0.0.1:8787/api/v1/pirate-ship/balance'
curl 'http://127.0.0.1:8787/api/v1/pirate-ship/rates?to_zip=10001&weight_oz=16&length_in=10&width_in=8&height_in=4'
curl 'http://127.0.0.1:8787/api/v1/pirate-ship/shipments?from_date=2026-10-01&limit=50'
curl -X POST http://127.0.0.1:8787/api/v1/pirate-ship/shipments \
-H 'Content-Type: application/json' \
-d '{"full_name": "Linda Morales", "address1": "350 5th Ave", "city": "New York", "state": "NY", "zip": "10118", "weight_oz": 20}'
按名称调用任意工具,并将请求体作为参数:
curl -X POST http://127.0.0.1:8787/api/v1/pirate-ship/tools/list_shipments -d '{"carrier": ["UPS"]}'
GET /api/v1/pirate-ship/tools:列出每个工具及其路由、输入架构和示例答案。GET /docs:交互式 OpenAPI 文档;GET /openapi.json:架构,可用于 n8n、Postman 或生成的客户端。- 答案采用 JSON 格式。报告列表接受
limit和offset参数,并返回total。
服务仅侦听 127.0.0.1。若要从你的另一台设备访问它,请设置令牌;此后每个请求都需要提供 Authorization: Bearer <token>:
PIRATE_SHIP_MCP_TOKEN=$(openssl rand -hex 24) pirate-ship-mcp serve --host 0.0.0.0
Python 和示例脚本
直接从 Python 调用,无需服务:
from pirate_ship_api_mcp import call
from pirate_ship_api_mcp.scripting import paginate_offset, write_rows
rates = call("get_rates", to_zip="10001", weight_oz=16, length_in=10, width_in=8, height_in=4)["rates"]
shipments = list(paginate_offset("list_shipments", {"from_date": "2026-10-01"}, "shipments"))
write_rows(shipments, "october.csv")
call("create_shipment", full_name="Linda Morales", address1="350 5th Ave", city="New York", zip="10118", weight_oz=20)
也可以从命令行调用单个工具:pirate-ship-mcp call list_shipments limit=10,或传入 JSON 对象。
examples/ 中提供了现成脚本。每个脚本都会输出 JSON 或简短报告;适用时可使用 --out file.csv 或 --out file.json,并支持 --help:
| 脚本 | 功能 |
|---|---|
compare_rates.py | 查询单个包裹的 USPS 和 UPS 运费,按价格从低到高排列。可用 --size 10x8x4、--country。 |
draft_batch_from_csv.py | 将收件人 CSV 转为一个未付款的草稿批次,并附上一个 Saved Package;输出每组的运费。列出没有地址的行,不会猜测。 |
store_orders.py | 刷新已连接的商店,并列出等待发货的订单。 |
export_shipments.py | 将已购买的标签导出为 CSV 或 JSON:收件人、追踪号码、服务、费用和状态。支持 --since、--carrier。 |
tracking_report.py | 列出最近 N 天内尚未送达的标签,并显示最新事件和 stuck 标记。 |
refund_candidates.py | 查找重复标签以及在 28 天退款期限内没有承运商扫描记录的标签。脚本会列出这些标签;你需要在 Pirate Ship 中申请退款。 |
scan_form.py | 生成今日标签的 USPS SCAN Form,并提供 PDF 链接。 |
pickup_quote.py | 显示今日包裹及各承运商的重量和上门取件价格,不会预约取件。 |
carrier_adjustments.py | 显示承运商的费用调整,并将你输入的重量和尺寸与承运商测量的数据并列展示。 |
spend_report.py | 按日期范围汇总标签、支出、节省金额、承运商占比、主要州和余额。使用 --transactions 保存每笔扣款。 |
ship_from_addresses.py | 列出你的 Ship From Addresses 和 Saved Packages,以及其他工具所需的 ID。 |
python examples/compare_rates.py --to-zip 94103 --weight-oz 32 --size 12x10x6
python examples/draft_batch_from_csv.py orders.csv --title "Wholesale 19 Oct" --package "Small box"
按计划运行时,只要自己的电脑处于开机状态,就可以使用 cron:0 18 * * 1-5 cd ~/pirate-ship-api-mcp-server && .venv/bin/python examples/tracking_report.py --days 10 --out late.csv。
全部 51 个工具
金额以美元计,重量以盎司计,尺寸以英寸计,日期采用 Chrome 的时区。运行 pirate-ship-mcp tools 可打印此列表;运行 pirate-ship-mcp tools --json 可附带输入架构。
运费和地址
| 工具 | 访问权限 | REST 路由 | 功能 |
|---|---|---|---|
get_rates | 读取 | GET /rates | 查询单个包裹的 USPS 和 UPS 服务及价格,按价格从低到高排列。 |
parse_address | 读取 | GET /addresses/parse | 将粘贴的地址拆分为姓名、街道、城市、州、ZIP 和国家/地区。 |
search_recipients | 读取 | GET /recipients/search | 查找姓名、电子邮件或电话号码匹配的过往收件人地址。 |
list_package_types | 读取 | GET /package-types | 列出各承运商的包装类型(箱子、信封、固定费率包装)及尺寸和重量限制。 |
草稿面单和批次
| 工具 | 访问权限 | REST 路由 | 功能说明 |
|---|---|---|---|
create_shipment | 写入 | POST /shipments | 为一个包裹创建未付款的草稿面单,并显示所有费率;可在 Pirate Ship 中购买。 |
create_batch | 写入 | POST /batches | 为多个包裹创建未付款的草稿批次,并显示每个费率组的费率;可在 Pirate Ship 中购买。 |
create_batch_from_orders | 写入 | POST /batches/from-orders | 使用一个已保存的包裹,将商店订单转换为发货批次;不会购买面单。 |
get_batch | 读取 | GET /batches/{batch_id} | 查看草稿或已购买的批次,包括发货记录、追踪信息、待购买费率和可退款项目。 |
list_batches | 读取 | GET /batches | 按时间倒序列出最新批次和单张面单,并显示状态和追踪数量。 |
change_ship_date | 写入 | PUT /batches/{batch_id}/ship-date | 将草稿批次改到其他发货日期,并返回新费率。 |
rename_batch | 写入 | PATCH /batches/{batch_id} | 更改批次名称。 |
delete_batch | 写入 | DELETE /batches/{batch_id} | 删除未付款的草稿批次或单个发货记录。 |
打印和 SCAN 表单
| 工具 | 访问权限 | REST 路由 | 功能说明 |
|---|---|---|---|
download_labels | 读取 | GET /labels | 获取批次或指定发货记录中可打印面单的下载链接。 |
create_scan_form | 写入 | POST /scan-forms | 为某个发货日期的面单创建 USPS 当日结束 SCAN 表单,并提供 PDF 链接。 |
list_scan_forms | 读取 | GET /scan-forms | 按发货地址列出 USPS SCAN 表单,附带 PDF 链接及尚未关联表单的面单。 |
发货和追踪
| 工具 | 访问权限 | REST 路由 | 功能说明 |
|---|---|---|---|
list_shipments | 读取 | GET /shipments | 按时间倒序列出在 Pirate Ship 中购买的面单,并显示收件人、追踪信息、费用和状态。 |
get_shipment | 读取 | GET /shipments/{shipment_id} | 查看单个发货记录,包括追踪信息、服务、费用、收件人和承运商调整。 |
export_shipments | 读取 | GET /shipments/export | 获取包含所有列的发货报告 CSV 下载链接。 |
报告、余额和退款
| 工具 | 访问权限 | REST 路由 | 功能说明 |
|---|---|---|---|
get_account_balance | 读取 | GET /balance | 获取报告页面中的账户余额、待处理退款和待处理退货。 |
get_shipping_stats | 读取 | GET /stats | 获取日期范围内的面单、支出、节省金额、追踪信息和包裹去向,如报告页面所示。 |
list_transactions | 读取 | GET /transactions | 按时间倒序列出 Pirate Ship 余额中的所有扣款、付款和退款。 |
list_receipts | 读取 | GET /receipts | 按时间倒序列出支付给 Pirate Ship 的款项;使用 get_receipt 查看单笔款项。 |
get_receipt | 读取 | GET /receipts/{receipt_id} | 查看一笔支付给 Pirate Ship 的款项,包括账单地址和该款项支付的面单。 |
list_refunds | 读取 | GET /refunds | 按申请时间倒序列出面单退款及其状态和金额。 |
list_return_labels | 读取 | GET /return-labels | 列出按使用付费的退货面单,以及客户是否已使用这些面单。 |
list_carrier_adjustments | 读取 | GET /carrier-adjustments | 列出承运商在面单使用后收取的额外费用或提供的抵扣,并显示包裹原始信息和实际信息。 |
export_report | 读取 | GET /reports/{report}/export | 导出交易、退款、收据、退货面单或承运商调整报告的 CSV。 |
上门取件
| 工具 | 访问权限 | REST 路由 | 功能说明 |
|---|---|---|---|
get_pickup_quote | 读取 | GET /pickups/quote | 查询 USPS 或 UPS 上门取件的费用;USPS 上门取件免费。不会预约取件。 |
list_pickups | 读取 | GET /pickups | 列出已安排和过去的 USPS 与 UPS 上门取件及其确认号码。 |
商店订单
| 工具 | 访问权限 | REST 路由 | 功能说明 |
|---|---|---|---|
list_store_connections | 读取 | GET /store-connections | 查看已连接到 Pirate Ship、用于导入订单的商店和电商平台及其状态。 |
sync_store_orders | 写入 | POST /import-orders/sync | 将每个已连接商店的新订单拉取到 Pirate Ship 的导入列表中。 |
list_import_orders | 读取 | GET /import-orders | 查看已连接商店集成中的未发货订单,与导入表格中的内容相同。 |
ignore_orders | 写入 | POST /import-orders/ignore | 将商店订单从导入列表中隐藏,但不发货。 |
unignore_orders | 写入 | DELETE /import-orders/ignore | 将已忽略的商店订单重新放回导入列表。 |
发货地址
| 工具 | 访问权限 | REST 路由 | 功能说明 |
|---|---|---|---|
list_ship_from_addresses | 读取 | GET /ship-from-addresses | 查看发货地址及其退货地址;其中一个为默认地址。 |
create_ship_from_address | 写入 | POST /ship-from-addresses | 添加一个美国发货地址,并可选择设置单独的退货地址。 |
update_ship_from_address | 写入 | PATCH /ship-from-addresses/{address_id} | 修改发货地址的名称、发货地点或退货地址。 |
set_default_ship_from_address | 写入 | PUT /ship-from-addresses/{address_id}/default | 将一个发货地址设为新货件和运费报价的默认地址。 |
delete_ship_from_address | 写入 | DELETE /ship-from-addresses/{address_id} | 删除已保存的发货地址。无法删除默认地址。 |
已保存的包裹
| 工具 | 访问权限 | REST 路由 | 功能说明 |
|---|---|---|---|
list_saved_packages | 读取 | GET /saved-packages | 查看“设置”中的已保存包裹,包括尺寸、重量及为每个包裹保存的附加服务。 |
create_saved_package | 写入 | POST /saved-packages | 保存包裹(类型、尺寸、重量、附加服务),以便在标签上重复使用。 |
update_saved_package | 写入 | PATCH /saved-packages/{package_id} | 修改已保存的包裹;未提供的字段将保留原值。 |
delete_saved_package | 写入 | DELETE /saved-packages/{package_id} | 删除已保存的包裹。使用该包裹制作的标签不受影响。 |
追踪邮件
| 工具 | 访问权限 | REST 路由 | 功能说明 |
|---|---|---|---|
get_tracking_email_settings | 读取 | GET /tracking-email-settings | 查看收件人是否默认会收到追踪邮件、购买后多久发送,以及所用模板。 |
update_tracking_email_settings | 写入 | PATCH /tracking-email-settings | 开启或关闭默认追踪邮件,并设置购买后发送的延迟时间。 |
list_email_templates | 读取 | GET /email-templates | 查看追踪邮件模板,包括主题、发件人和 HTML 正文;其中一个为默认模板。 |
create_email_template | 写入 | POST /email-templates | 添加追踪邮件模板,用于发送给收件人并附上追踪链接的邮件。 |
update_email_template | 写入 | PATCH /email-templates/{template_id} | 修改追踪邮件模板;未提供的字段将保留原值。 |
delete_email_template | 写入 | DELETE /email-templates/{template_id} | 删除追踪邮件模板。 |
标签设置
| 工具 | 访问权限 | REST 路由 | 功能说明 |
|---|---|---|---|
get_label_settings | 读取 | GET /label-settings | 查看标签尺寸和文件格式、装箱单、徽标、二维码、地址更正及导出格式。 |
update_label_settings | 写入 | PATCH /label-settings | 修改标签尺寸、文件格式、装箱单、徽标、二维码、地址更正或导出格式。 |
此版本中未包含
| 工具 | 原因 |
|---|---|
buy_label | 会使用您的账户余额或扣款。请在 Pirate Ship 中购买。 |
refund_label、refund_batch | 退款申请一经提交便无法撤销,且会转移资金。请在 Pirate Ship 中申请。 |
schedule_pickup、cancel_pickup | UPS 取件会收费,取消后会退款。这里提供 get_pickup_quote 和 list_pickups。 |
dispute_adjustment | 争议是针对您余额中的一笔扣款。这里提供 list_carrier_adjustments。 |
工具描述中的“buy it with buy_label”表示:在 Pirate Ship 的 Web 应用中购买草稿。出于设计考虑,绝不构建以下功能:访问您的 Pirate Ship 登录信息、电子邮件、密码、安全设置、付款方式、账单信息和身份验证。
配置
| 变量 | 默认值 | 作用 |
|---|---|---|
PIRATE_SHIP_MCP_HOME | ~/.config/pirate-ship-api-mcp | session.json 所在文件夹。 |
PIRATE_SHIP_AUTH_TOKEN | 使用 pirate_id_f0fecf84 Cookie,而不是 pirate-ship-mcp connect。 | |
PIRATE_SHIP_PROXY | 向 Pirate Ship 发送所有请求时使用的代理,例如 http://user:pass@host:port。 | |
PIRATE_SHIP_MCP_READ_ONLY | 1 会隐藏并拒绝所有会更改 Pirate Ship 的工具(等同于 --read-only)。 | |
PIRATE_SHIP_MCP_TOKEN | serve 所需的 Bearer 令牌;若要监听 127.0.0.1 以外的地址,则必须设置。 | |
PIRATE_SHIP_MCP_HOST、PIRATE_SHIP_MCP_PORT | 127.0.0.1、8787 | serve 的地址。 |
TZ | Chrome 的时区 | 当 connect 无法读取 Chrome 的时区时,用于“今天”和日期范围的时区。 |
安全与您的 Pirate Ship 账户
- **您的密码绝不会传给此代码。**这里只读取 Cookie,且仅限 pirateship.com 的 Cookie。
- 会话文件归您所有。
session.json创建时的权限模式为 0600。任何拥有该文件的人都可以以您的身份操作 Pirate Ship,因此请勿将其放入 git 或共享文件夹。 - 默认仅限本地。
serve绑定到127.0.0.1;若使用其他地址,则必须设置PIRATE_SHIP_MCP_TOKEN,否则会拒绝启动。 - **仅限 pirateship.com。**系统会拒绝向 pirateship.com 之外的地址发送请求或重定向。
- **没有工具会转移资金。**没有任何工具会购买运单标签、申请退款、预约付费取件或操作您的付款方式。
- 只读模式。
--read-only或PIRATE_SHIP_MCP_READ_ONLY=1仅开放 29 个只读工具。 - **部分更改会影响您的收件人。**跟踪电子邮件设置和模板会更改客户收到的电子邮件。MCP 客户端会在运行这些工具前征求确认;脚本则不会。
错误
REST API 会返回 {"error": "<code>", "message": "..."}。MCP 服务会将相同的代码和消息作为工具错误返回。
| 状态 | 代码 | 处理方法 |
|---|---|---|
| 401 | auth_required、auth_expired | 没有会话,或 Pirate Ship 已将您登出。请在 Chrome 中登录 Pirate Ship,然后运行 pirate-ship-mcp connect。 |
| 403 | scope_denied | 服务以只读模式运行。 |
| 403 | target_blocked | Pirate Ship 拒绝了请求或显示了机器人验证。请在 Chrome 中打开 ship.pirateship.com 一次,然后重试。 |
| 409 | captcha_required | Pirate Ship 要求完成 CAPTCHA。请在 Chrome 中完成验证。 |
| 422 | invalid_input | 参数缺失或有误;消息会指出具体参数。 |
| 429 | rate_limited | Pirate Ship 正在限制该账户。请等待几分钟。 |
| 502 | target_error | Pirate Ship 返回错误(ID 未知、地址无法计算运费),或其应用发生了更改。请运行 git pull 获取最新工具,或提交问题。 |
自托管或托管
| 本仓库 | Cotlet,托管版 | |
|---|---|---|
| 工具 | 51 个 | 全部 57 个,包含购买、退款、取件和争议处理 |
| 运行方式 | 在你的电脑上运行,电脑开机时可用 | 在云端 24/7 运行 |
| Pirate Ship 会话 | 使用你的 Chrome,Cookie 存储在本地文件中 | 使用你在欧盟的专属 Cloud Browser,配置文件通过 AES-256-GCM 加密,并保持登录状态 |
| Pirate Ship 更改应用时 | 我们修复后,你执行一次 git pull | 我们为你修复,每天测试所有工具 |
| 审批 | MCP 客户端会在每次调用时询问你 | 购买和退款需等待你确认,可按工具切换 |
| 兼容对象 | 你电脑上的 MCP 客户端、本地脚本 | Claude.ai 和 ChatGPT 连接器、n8n、Make、Zapier,以及任何 HTTP 客户端 |
| 适用对象 | 你本人,限非商业用途 | 团队、企业、代理机构 |
| 价格 | 免费 | 免费试用 7 天,含 2,000 点数,无需信用卡;之后可购买一次性点数包,5,000 点数起价 $29 |
在托管版中,成功调用会消耗 20 到 30 点数(大多数工具消耗 25 点数),调用失败不收费;只要 Cloud Browser 启用了 Agent 应用,每天就会消耗 50 点数。完整定价。
常见问题
Pirate Ship 有官方 API 吗? 没有。Pirate Ship 没有 API、没有 Webhook,也没有官方 MCP 服务(截至 2026 年 10 月 11 日核实)。其帮助中心对此有说明,并建议改用内置的商店集成和电子表格上传。详情:cotlet.dev/integrations/pirate-ship-api-mcp-server。
有适用于 Claude、ChatGPT 或 Cursor 的 Pirate Ship MCP 服务吗?
有,这个服务运行在你的机器上:pirate-ship-mcp mcp 可用于 Claude Code、Claude Desktop、Cursor 和 Codex。ChatGPT 和 Claude.ai 连接器需要公开的 HTTPS URL,托管版 Pirate Ship MCP 服务可提供该 URL。
我可以通过脚本获取 USPS 和 UPS 运费吗?
可以。get_rates 会按价格从低到高返回所有服务的 Pirate Ship 价格、零售价、配送区域和预计送达时间,且不会保存任何内容:python examples/compare_rates.py --to-zip 10001 --weight-oz 16 --size 10x8x4。
它可以购买运单标签吗?
这个代码库不行。它会根据各组的运费创建草稿(create_shipment、create_batch、create_batch_from_orders),然后你在 Pirate Ship 中点击 Buy。托管版提供了 buy_label,并可为每次购买设置价格上限。
我可以通过电子表格或商店订单创建批次吗?
可以。create_batch 每次调用最多可接收 500 个收件人,create_batch_from_orders 则从已连接的商店获取订单。examples/draft_batch_from_csv.py 可读取 CSV。
我可以将货件和追踪信息导出为 CSV 吗?
可以:python examples/export_shipments.py --since 2026-10-01 --out october.csv,也可以使用 export_shipments 导出 Pirate Ship 自带的电子表格,其中包含所有列。
为什么它需要访问我的 Chrome? 为了在不使用密码的情况下读取你的 Pirate Ship 会话。Pirate Ship 的登录受到 Cloudflare 检查,因此你需要在浏览器中登录,之后由普通请求完成其余操作。每次登录只需使用一次 Chrome,而不是每次调用都用。
Pirate Ship 将我登出后会怎样?
调用会因 auth_expired 失败。如果 Chrome 已启用远程调试,服务会在下一次调用时读取新的 Cookie(Chrome 提示时点击 Allow);否则,请重新运行 pirate-ship-mcp connect。
可以在 VPS 或 Docker 中运行吗?
技术上可以,需使用 PIRATE_SHIP_AUTH_TOKEN。如果不使用,该 Cookie 大约一天后失效;届时 Pirate Ship 会发现你的会话来自数据中心 IP。若要始终在线运行,托管版会将你的会话保存在你自己的 Cloud Browser 中。
我的 Pirate Ship 账号会被封禁吗? 请求会携带 Chrome 的指纹,并且会像你亲自点击那样逐个发出。没人能保证平台绝不会采取措施。请保持正常使用。
我可以在工作中使用,或用于客户项目吗? 不可以,该许可证仅允许非商业用途。团队、公司或客户项目请使用 Cotlet,或发送邮件至 [email protected]。
它是开源的吗? 源代码是公开的,但该许可证不是开源许可证:仅限非商业用途,不得用于商业活动。
某个工具出故障了,或者我需要其他工具。 请提交问题,并附上工具名称和错误消息。
许可证
PolyForm Noncommercial License 1.0.0。简而言之:
- 允许: 非商业用途:你使用自己的 Pirate Ship 账户满足个人需求,或慈善机构、学校、公共研究机构或政府部门使用。修改代码,并以相同许可证分享。
- 不允许: 任何商业用途,包括你自己的业务;客户项目;出售或提供本项目,或基于本项目构建的服务。
由 Cotlet(@cotletdev)维护。Pirate Ship 是其所有者的商标。本项目为非官方项目,与 Pirate Ship 无关联,未获其认可或赞助。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。