MCP server wrapping the Shopline Open API into 143 AI Agent-callable tools for e-commerce data analysis
Project description
MCP Shopline
An open-source MCP (Model Context Protocol) server that wraps the Shopline Open API into 143 AI-callable tools (75 read + 68 write) for e-commerce data analysis.
Built for Claude Code, Claude Cowork, and any MCP-compatible AI client. Enables AI agents to query orders, products, inventory, customer behavior, and promotions from Shopline stores through natural language.
What This Does
- 143 ready-to-use tools covering orders, products, inventory, customers, promotions, categories, subscriptions, conversations, reviews, and more
- MCP server (stdio JSON-RPC 2.0) — plug into Claude Code and start asking questions immediately
- Zero external dependencies beyond Python 3.9+ standard library and
requests - Built-in pagination, retry, and rate limiting — tools handle all API complexity internally
- Designed for AI agents — structured JSON output with natural language-friendly parameters (dates as
YYYY-MM-DD, not timestamps)
API Reference
This project is built on the Shopline Open API v1.
- API Documentation: https://open-api.docs.shoplineapp.com
- Authentication: Bearer token via Shopline merchant admin
- Base URL:
https://open.shopline.io/v1/
You need a valid Shopline API access token from a Shopline merchant account. Refer to the Shopline API authentication guide for how to obtain one.
Quick Start
Install
pip install mcp-shopline
Or use uvx (no install needed):
uvx --from mcp-shopline mcp-shopline
Set your API token:
export SHOPLINE_API_TOKEN=your_token_here
Use with Claude Code
Add the server via the Claude CLI:
claude mcp add --transport stdio shopline -- mcp-shopline
Or with the environment variable inline:
claude mcp add --transport stdio shopline -e SHOPLINE_API_TOKEN=your_token_here -- mcp-shopline
If you clone the repo locally, the .mcp.json config will be auto-detected by Claude Code and all 143 tools become available immediately.
Use with Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"shopline": {
"command": "mcp-shopline",
"env": {
"SHOPLINE_API_TOKEN": "your_token_here"
}
}
}
}
Or with uvx:
{
"mcpServers": {
"shopline": {
"command": "uvx",
"args": ["--from", "mcp-shopline", "mcp-shopline"],
"env": {
"SHOPLINE_API_TOKEN": "your_token_here"
}
}
}
}
Important: Write Tools
This server includes tools that create, update, and delete data in your Shopline store. Your API token's permission scope controls which operations are available.
- Review your token permissions in Shopline merchant admin
- Restrict to only the scopes you need
- Write tools are clearly marked with
[WRITE]prefix in their descriptions - Write tests require
SHOPLINE_TEST_WRITES=1to run
Tools (143)
Read Tools (75)
Orders (12)
| Tool | Description |
|---|---|
query_orders |
Query orders by date, status, channel, store |
get_sales_summary |
Revenue, AOV, item price, payment/delivery breakdown |
get_top_products |
Product sales ranking by quantity or revenue |
get_sales_trend |
Daily/weekly/monthly sales trend data |
get_channel_comparison |
Compare performance across stores/channels |
get_order_detail |
Full order detail with line items |
get_refund_summary |
Return order statistics and refund amounts |
get_archived_orders |
Query archived/closed orders |
get_order_labels |
List labels attached to orders |
get_order_tags |
List tags attached to orders |
get_order_action_logs |
Retrieve action/audit logs for an order |
get_order_transactions |
Payment transaction records for an order |
Products & Inventory (9)
| Tool | Description |
|---|---|
get_product_list |
Search products by keyword, brand |
get_product_variants |
SKU variants with size x color matrix |
get_inventory_overview |
Total inventory summary by brand |
get_low_stock_alerts |
Low stock / out-of-stock SKU alerts |
get_warehouses |
List all warehouses and store locations |
get_stock_by_warehouse |
Per-warehouse stock distribution matrix |
get_locked_inventory |
View inventory locked by pending orders |
list_purchase_orders |
List purchase/replenishment orders |
get_purchase_order_detail |
Full detail of a single purchase order |
Analytics (11)
| Tool | Description |
|---|---|
get_rfm_analysis |
Customer RFM segmentation |
get_repurchase_analysis |
Repurchase rate and cycle analysis |
get_customer_geo_analysis |
Customer geographic distribution |
get_inventory_turnover |
Stock turnover rate and days |
get_category_sales |
Sales breakdown by product category |
get_promotion_analysis |
Promotion campaign effectiveness |
get_refund_by_store |
Return order breakdown by store/channel |
get_stock_transfer_suggestions |
Auto-generate inter-warehouse transfer recommendations |
get_promotion_roi |
Cross-reference promotion periods with sales trend to calculate lift and ROI |
get_customer_lifecycle |
Compare RFM segments across two periods to track customer migration |
get_slow_movers |
Identify products with high inventory but low sales for clearance planning |
Customers (9)
| Tool | Description |
|---|---|
list_customers |
Search and list customer profiles |
get_customer_profile |
Full profile for a single customer |
list_customer_groups |
List customer segmentation groups |
get_customer_group_members |
Members within a customer group |
list_store_credits |
Store credit balances and history |
list_membership_tiers |
Membership tier definitions |
get_customer_tier_history |
Tier upgrade/downgrade history for a customer |
list_member_point_rules |
Point earning and redemption rules |
list_custom_fields |
Custom field definitions for customer profiles |
Categories & Promotions (14)
| Tool | Description |
|---|---|
get_category_tree |
Full category hierarchy tree |
get_category_detail |
Detail for a single category |
list_promotions |
List all promotion campaigns |
get_promotion_detail |
Full detail for a single promotion |
search_promotions |
Search promotions by keyword or status |
list_flash_price_campaigns |
List flash sale / limited-time price campaigns |
get_flash_price_campaign_detail |
Detail for a single flash price campaign |
list_affiliate_campaigns |
List affiliate marketing campaigns |
get_affiliate_campaign_detail |
Detail for a single affiliate campaign |
get_affiliate_campaign_usage |
Usage and performance stats for an affiliate campaign |
list_gifts |
List gift-with-purchase promotions |
list_addon_products |
List add-on product promotions |
list_product_subscriptions |
List product subscription plans |
get_product_subscription_detail |
Detail for a single subscription plan |
Order Extended (8)
| Tool | Description |
|---|---|
list_return_orders |
List return/refund orders |
get_return_order_detail |
Full detail for a single return order |
get_order_delivery |
Delivery tracking and logistics info for an order |
list_conversations |
List customer service conversations |
get_conversation_messages |
Messages within a conversation thread |
list_product_reviews |
List product reviews |
get_product_review_detail |
Full detail for a single product review |
Store Settings (12)
| Tool | Description |
|---|---|
list_merchants |
List merchant accounts |
get_merchant_detail |
Detail for a single merchant |
list_payments |
List configured payment methods |
list_delivery_options |
List configured delivery options |
get_delivery_option_detail |
Detail for a single delivery option |
get_delivery_time_slots |
Available delivery time slots |
list_channels |
List sales channels (online, POS, etc.) |
get_channel_detail |
Detail for a single channel |
get_app_settings |
App-level configuration settings |
list_taxes |
List tax configurations |
get_staff_permissions |
Staff account permission settings |
get_token_info |
Info and scope of the current API token |
list_agents |
List customer service agent accounts |
Write Tools (68)
Write tools are marked with [WRITE] in their descriptions. They require appropriate token permissions and SHOPLINE_TEST_WRITES=1 to run in tests.
| Domain | Tools |
|---|---|
| Order Operations | 8 tools — update status, add notes, assign labels/tags, cancel, fulfill |
| Customer Operations | 6 tools — create/update customer, adjust store credits, update group membership |
| Product Operations | 15 tools — create/update/delete products, manage variants, update stock |
| Promotion/Coupon/Campaign Operations | 12 tools — create/update/delete promotions, coupons, flash sales, affiliate campaigns |
| Category Operations | 3 tools — create, update, delete categories |
| Return Order Operations | 2 tools — approve/reject return orders |
| Conversation Operations | 2 tools — reply to conversations, update conversation status |
| Review Operations | 6 tools — reply to reviews, approve/reject/hide reviews |
| Gift/Addon Operations | 7 tools — create/update/delete gift and add-on promotions |
| Purchase Order Operations | 2 tools — create and receive purchase orders |
| Media/Metafield Operations | 2 tools — upload media, set metafields |
| Delivery/Merchant Operations | 3 tools — update delivery info, manage merchant settings |
API Endpoint Coverage
Based on Shopline Open API v1:
| Endpoint | Status | Notes |
|---|---|---|
| Orders | 200 | Full access (read + write) |
| Products | 200 | Full access (read + write) |
| Warehouses | 200 | Full access |
| Categories | 200 | Full access (read + write) |
| Return Orders | 200 | Full access (read + write) |
| Promotions | 200 | Full access (read + write) |
| Product Stocks | 200 | Per-warehouse breakdown |
| Customers | 200 | Full access (read + write) |
| Channels | 200 | Full access |
| Conversations | 200 | Customer service threads (read + write) |
| Reviews | 200 | Product reviews (read + write) |
| Subscriptions | 200 | Product subscription plans |
| Affiliate Campaigns | 200 | Affiliate marketing (read + write) |
| Flash Price Campaigns | 200 | Flash sales (read + write) |
| Purchase Orders | 200 | Replenishment orders (read + write) |
| Gifts & Add-ons | 200 | Gift-with-purchase promotions (read + write) |
| Store Settings | 200 | Payments, delivery, taxes, staff permissions |
Note: Endpoint availability depends on your Shopline API token permissions. The status above reflects full-permission access. Restrict your token to only the scopes you need.
Project Structure
mcp-shopline/
├── mcp_server.py # MCP Server (stdio JSON-RPC 2.0)
├── .mcp.json # Claude Code MCP auto-discovery config
├── .env.example # Environment variable template
├── config/
│ └── settings.py # API config (token from env, endpoints)
├── tools/
│ ├── base_tool.py # Shared HTTP client (retry, pagination)
│ ├── order_tools.py # Order read tools (12)
│ ├── product_tools.py # Product/inventory read tools (9)
│ ├── analytics_tools.py # Analytics read tools (11)
│ ├── customer_tools.py # Customer read tools (9)
│ ├── category_tools.py # Category & promotion read tools (14)
│ ├── extended_tools.py # Order extended read tools (8)
│ ├── settings_tools.py # Store settings read tools (12)
│ ├── writes/
│ │ ├── order_writes.py # Order write tools (8)
│ │ ├── customer_writes.py # Customer write tools (6)
│ │ ├── product_writes.py # Product write tools (15)
│ │ ├── promotion_writes.py # Promotion/coupon write tools (12)
│ │ ├── category_writes.py # Category write tools (3)
│ │ ├── return_writes.py # Return order write tools (2)
│ │ ├── conversation_writes.py # Conversation write tools (2)
│ │ ├── review_writes.py # Review write tools (6)
│ │ ├── gift_writes.py # Gift/addon write tools (7)
│ │ ├── purchase_writes.py # Purchase order write tools (2)
│ │ ├── media_writes.py # Media/metafield write tools (2)
│ │ └── delivery_writes.py # Delivery/merchant write tools (3)
│ └── tool_registry.py # Unified tool registry
├── tests/
│ └── test_all_tools.py # E2E tests for all 143 tools
└── scripts/
├── auth/
│ ├── test_connection.py # API connection validator
│ └── inspect_data_structure.py # API response structure explorer
└── audit/
└── scope_check.py # Token scope and permission auditor
API Constraints
These are Shopline Open API limitations handled internally by the tools:
- Pagination:
page+per_page(max 50), 0.2s delay between pages for rate limiting - Search limit: 10,000 results max;
fetch_all_pages_by_date_segments()splits large queries by date range - Order status: online orders use
confirmed, POS usescompleted— tools include both by default - Channel identification:
created_from="shop"(online) /"pos"(retail); store name fromorder.channel.created_by_channel_name - Currency: all monetary values in TWD (New Taiwan Dollar), returned as float via
money_to_float()
Development
Setup from Source
git clone https://github.com/asgard-ai-platform/mcp-shopline.git
cd mcp-shopline
pip install -e .
Run Tests
# Read tools (no side effects)
python tests/test_all_tools.py
# Include write tools (creates/updates/deletes data)
SHOPLINE_TEST_WRITES=1 python tests/test_all_tools.py
python scripts/auth/test_connection.py
Adding a New Tool
- Define a schema dict (Claude API
tool_useformat withname,description,input_schema) - Implement the function using
api_get/fetch_all_pagesfrombase_tool.py - Append
{"schema": ..., "function": ...}to the module's tool list - Auto-registered via
tool_registry.pyandmcp_server.py— no extra wiring needed
Known Test Gaps
The following tools are implemented and registered but have not been fully E2E tested due to test-store data or token-scope limitations. They compile correctly, import successfully, and follow all project conventions — they just need real data or broader token permissions to verify end-to-end.
Requires store data (create via Shopline admin)
| Tool | What's needed |
|---|---|
get_flash_price_campaign_detail |
A flash price campaign (create in Shopline admin > Marketing > Flash Sale) |
get_affiliate_campaign_usage |
An affiliate campaign that has been used in at least one order |
get_product_subscription_detail |
A product with subscription enabled (configure in admin > Products) |
get_return_order_detail |
A completed return order (create via admin > Orders > Returns) |
get_order_delivery |
An order with shipment executed (delivery has its own ID after shipment) |
get_customer_group_members |
At least one customer group (create via admin > Customers > Groups) |
get_customer_tier_history |
A customer with membership tier changes (requires tier rules configured) |
get_delivery_time_slots |
A delivery option with time slots configured |
Requires token permissions
| Tool | Required scope |
|---|---|
list_conversations / get_conversation_messages |
Conversations read permission |
list_channels / get_channel_detail |
Channels read permission (commonly returns 403/422; channel info is also available via order.channel.created_by_channel_name) |
Write tools
All 68 write tools have been verified at the import/registration level. Full E2E write tests require SHOPLINE_TEST_WRITES=1 and a dedicated test store to avoid modifying production data. See tests/test_writes/ for gated test scripts.
Roadmap
-
get_refund_by_store— return order breakdown by store/channel -
get_stock_transfer_suggestions— auto-generate inter-warehouse transfer recommendations based on sales velocity and stock levels -
get_category_tree— standalone category structure viewer -
get_promotion_roi— cross-reference promotion periods with sales trend data to calculate lift and ROI -
get_customer_lifecycle— compare RFM segments across two periods to track customer migration (upgrade/churn) -
get_slow_movers— identify products with high inventory but low sales for clearance planning - Customers API tools (member profiles, demographics, membership tiers)
- Support for multiple Shopline stores (multi-token)
- Add webhook support for real-time order notifications
Usage Examples
"What were my sales this month?"
You: 這個月的銷售摘要是什麼?
AI calls:
get_sales_summary(
start_date = "2026-04-01",
end_date = "2026-04-09",
channel = "all"
)
Result: 本月營業額 NT$1,234,567,共 456 筆訂單,客單價 NT$2,707,線上佔 62%、門市佔 38%。
"Which products are selling best?"
You: 上個月最暢銷的前 5 名商品是什麼?
AI calls:
get_top_products(
start_date = "2026-03-01",
end_date = "2026-03-31",
top_n = 5,
sort_by = "revenue"
)
Result: 第一名「經典帆布休閒鞋 Classic Canvas」營收 NT$892,000(268 雙),第二名「輕量機能防風外套」營收 NT$654,000...
"Tell me about this customer"
You: 幫我查一下客戶「陳大明」的完整資訊
AI calls:
list_customers(search_keyword = "陳大明")
→ get_customer_profile(customer_id = "5f3a8b2c...")
Result: 陳大明,VIP 會員,累計消費 NT$56,330,近 30 天消費 5 次,會員點數餘額 2,800 點,儲值金餘額 NT$500。
"Any products running low on stock?"
You: 哪些商品快缺貨了?
AI calls:
get_low_stock_alerts(threshold = 5)
Result: 共 3,098 個 SKU 低於門檻,其中 2,847 個已完全缺貨。最嚴重的是「經典帆布休閒鞋 Classic Canvas」深藍色 M 號(庫存 0)。
"Compare online vs. retail performance"
You: 比較一下線上和門市這個月的業績
AI calls:
get_channel_comparison(
start_date = "2026-04-01",
end_date = "2026-04-09"
)
Result: 線上官網營收 NT$780,000(佔 63%),信義旗艦店 NT$220,000(佔 18%),中山概念店 NT$120,000(佔 10%)...
"Who are my best customers vs. churning ones?"
You: 分析一下客戶 RFM 分群
AI calls:
get_rfm_analysis(
start_date = "2026-01-01",
end_date = "2026-04-09"
)
Result: 共 1,618 位客戶。最佳客戶 70 人(HHH),近期新客 433 人(HLL),流失高消費客戶 188 人(LLH)需要挽回。
"Create a new customer" (Write tool)
You: 幫我建立一個新客戶,姓名王小明,email wang@test.com
AI calls:
create_customer(
name = "王小明",
email = "wang@test.com"
)
Result: [WRITE] 客戶王小明建立成功,ID: 69d77d57...
Contributing
Contributions are welcome! Please open an issue or submit a pull request.
When adding new tools, follow the existing pattern in tools/ and ensure the tool passes the E2E test suite.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_shopline-0.3.0.tar.gz.
File metadata
- Download URL: mcp_shopline-0.3.0.tar.gz
- Upload date:
- Size: 77.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
daa1133fc5faaf93f89faf1e259ef35ee9bfdb5f28ae51558345c2e1e8792d15
|
|
| MD5 |
023eebd9d07ada6f27ea78bda5878cc0
|
|
| BLAKE2b-256 |
95d7e56b1914bbd1a16517af12dffb638bf4523d9e39dcd0f5e7916e2c645109
|
Provenance
The following attestation bundles were made for mcp_shopline-0.3.0.tar.gz:
Publisher:
publish.yml on asgard-ai-platform/mcp-shopline
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_shopline-0.3.0.tar.gz -
Subject digest:
daa1133fc5faaf93f89faf1e259ef35ee9bfdb5f28ae51558345c2e1e8792d15 - Sigstore transparency entry: 1460850762
- Sigstore integration time:
-
Permalink:
asgard-ai-platform/mcp-shopline@1928be78c4b9345885d116992452b9f38eb77b5c -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/asgard-ai-platform
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1928be78c4b9345885d116992452b9f38eb77b5c -
Trigger Event:
release
-
Statement type:
File details
Details for the file mcp_shopline-0.3.0-py3-none-any.whl.
File metadata
- Download URL: mcp_shopline-0.3.0-py3-none-any.whl
- Upload date:
- Size: 94.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f66fed3df46b09462594966f119752280780d3b8ceb61873e32a8939eb3b062
|
|
| MD5 |
5608d4679ffc2ee3208ce12cd0b519b4
|
|
| BLAKE2b-256 |
e2d36c102710dcb3f8d64be08f47786c95203149a0f887d25b35a23da32bc0b0
|
Provenance
The following attestation bundles were made for mcp_shopline-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on asgard-ai-platform/mcp-shopline
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_shopline-0.3.0-py3-none-any.whl -
Subject digest:
1f66fed3df46b09462594966f119752280780d3b8ceb61873e32a8939eb3b062 - Sigstore transparency entry: 1460850859
- Sigstore integration time:
-
Permalink:
asgard-ai-platform/mcp-shopline@1928be78c4b9345885d116992452b9f38eb77b5c -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/asgard-ai-platform
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1928be78c4b9345885d116992452b9f38eb77b5c -
Trigger Event:
release
-
Statement type: