diff --git a/.codespellrc b/.codespellrc index c554845f3..483f57e0b 100644 --- a/.codespellrc +++ b/.codespellrc @@ -56,7 +56,9 @@ # ans - bash and powershell variable short for answer -ignore-words-list = numer,wit,aks,edn,ser,ois,gir,rouge,categor,aline,ative,afterall,deques,dateA,dateB,TE,FillIn,alle,vai,LOD,InOut,pixelX,aNULL,Wee,Sherif,queston,Vertexes,nin,FO,CAF,Parth,ans +# mor - Merchant of Record (MoR) abbreviation used by the Subotiz billing plugin + +ignore-words-list = numer,wit,aks,edn,ser,ois,gir,rouge,categor,aline,ative,afterall,deques,dateA,dateB,TE,FillIn,alle,vai,LOD,InOut,pixelX,aNULL,Wee,Sherif,queston,Vertexes,nin,FO,CAF,Parth,ans,mor # Skip certain files and directories diff --git a/.github/plugin/marketplace.json b/.github/plugin/marketplace.json index e6eb1711a..6dc8c046e 100644 --- a/.github/plugin/marketplace.json +++ b/.github/plugin/marketplace.json @@ -919,6 +919,12 @@ "description": "Premium planning, thrifty implementation", "version": "1.0.0" }, + { + "name": "subotiz", + "source": "subotiz", + "description": "Connect to Subotiz MCP to handle subscriptions, usage billing, payments, taxes, and invoices — and drive revenue growth.", + "version": "0.0.3" + }, { "name": "swift-mcp-development", "source": "swift-mcp-development", diff --git a/docs/README.plugins.md b/docs/README.plugins.md index 78780526d..608f806ce 100644 --- a/docs/README.plugins.md +++ b/docs/README.plugins.md @@ -88,6 +88,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-plugins) for guidelines on how t | [skill-image-gen](../plugins/skill-image-gen/README.md) | Generate images using AI directly from your coding workflow. Supports OpenAI (gpt-image-2) and Google Gemini. BYO API key — the skill guides you through setup on first use. | 1 items | image-generation, openai, gemini, ai, art, sprites, textures, icons | | [software-engineering-team](../plugins/software-engineering-team/README.md) | 7 specialized agents covering the full software development lifecycle from UX design and architecture to security and DevOps. | 7 items | team, enterprise, security, devops, ux, architecture, product, ai-ethics | | [structured-autonomy](../plugins/structured-autonomy/README.md) | Premium planning, thrifty implementation | 3 items | | +| [subotiz](../plugins/subotiz/README.md) | Connect to Subotiz MCP to handle subscriptions, usage billing, payments, taxes, and invoices — and drive revenue growth. | 1 items | subotiz, payments, subscriptions, usage-based-billing, invoices, refunds, merchant-of-record, mor, tax-compliance, mcp | | [swift-mcp-development](../plugins/swift-mcp-development/README.md) | Comprehensive collection for building Model Context Protocol servers in Swift using the official MCP Swift SDK with modern concurrency features. | 2 items | swift, mcp, model-context-protocol, server-development, sdk, ios, macos, concurrency, actor, async-await | | [technical-spike](../plugins/technical-spike/README.md) | Tools for creation, management and research of technical spikes to reduce unknowns and assumptions before proceeding to specification and implementation of solutions. | 2 items | technical-spike, assumption-testing, validation, research | | [testing-automation](../plugins/testing-automation/README.md) | Comprehensive collection for writing tests, test automation, and test-driven development including unit tests, integration tests, and end-to-end testing strategies. | 9 items | testing, tdd, automation, unit-tests, integration, playwright, jest, nunit | diff --git a/docs/README.skills.md b/docs/README.skills.md index 361c6be64..085442f74 100644 --- a/docs/README.skills.md +++ b/docs/README.skills.md @@ -381,6 +381,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-skills) for guidelines on how to | [update-llms](../skills/update-llms/SKILL.md)
`gh skills install github/awesome-copilot update-llms` | Update the llms.txt file in the root folder to reflect changes in documentation or specifications following the llms.txt specification at https://llmstxt.org/ | None | | [update-markdown-file-index](../skills/update-markdown-file-index/SKILL.md)
`gh skills install github/awesome-copilot update-markdown-file-index` | Update a markdown file section with an index/table of files from a specified folder. | None | | [update-specification](../skills/update-specification/SKILL.md)
`gh skills install github/awesome-copilot update-specification` | Update an existing specification file for the solution, optimized for Generative AI consumption based on new requirements or updates to any existing code. | None | +| [use-subotiz](../skills/use-subotiz/SKILL.md)
`gh skills install github/awesome-copilot use-subotiz` | Operate Subotiz billing and payments through the subotiz MCP server: list/create customers, products and prices, inspect subscriptions, trades, refunds, invoices and webhook events. Use when the user asks to manage subscriptions, set up usage-based billing, create products/prices, look up payments or invoices, issue or inspect refunds, or work with Subotiz / Merchant-of-Record revenue operations. | None | | [vardoger-analyze](../skills/vardoger-analyze/SKILL.md)
`gh skills install github/awesome-copilot vardoger-analyze` | Use when the user asks to personalize the GitHub Copilot CLI assistant, adapt Copilot to their style, use vardoger, or analyze their Copilot CLI conversation history. Reads the local session directory at `~/.copilot/session-state/`, extracts recurring preferences and conventions, and writes a fenced personalization block into `~/.copilot/copilot-instructions.md`. Runs entirely on the user's machine via the local `vardoger` CLI (`pipx install vardoger`); no network calls and no uploads. Triggers: 'personalize my copilot', 'analyze my copilot history', 'tailor copilot to me', 'run vardoger', 'update my copilot instructions from history', 'make copilot learn my style'. | None | | [vscode-ext-commands](../skills/vscode-ext-commands/SKILL.md)
`gh skills install github/awesome-copilot vscode-ext-commands` | Guidelines for contributing commands in VS Code extensions. Indicates naming convention, visibility, localization and other relevant attributes, following VS Code extension development guidelines, libraries and good practices | None | | [vscode-ext-localization](../skills/vscode-ext-localization/SKILL.md)
`gh skills install github/awesome-copilot vscode-ext-localization` | Guidelines for proper localization of VS Code extensions, following VS Code extension development guidelines, libraries and good practices | None | diff --git a/plugins/subotiz/.github/plugin/plugin.json b/plugins/subotiz/.github/plugin/plugin.json new file mode 100644 index 000000000..c806f8c02 --- /dev/null +++ b/plugins/subotiz/.github/plugin/plugin.json @@ -0,0 +1,27 @@ +{ + "name": "subotiz", + "description": "Connect to Subotiz MCP to handle subscriptions, usage billing, payments, taxes, and invoices — and drive revenue growth.", + "version": "0.0.3", + "keywords": [ + "subotiz", + "payments", + "subscriptions", + "usage-based-billing", + "invoices", + "refunds", + "merchant-of-record", + "mor", + "tax-compliance", + "mcp" + ], + "author": { + "name": "Subotiz", + "url": "https://www.subotiz.com" + }, + "homepage": "https://www.subotiz.com", + "repository": "https://github.com/github/awesome-copilot", + "license": "MIT", + "skills": [ + "./skills/use-subotiz/" + ] +} diff --git a/plugins/subotiz/.mcp.json b/plugins/subotiz/.mcp.json new file mode 100644 index 000000000..1e517239d --- /dev/null +++ b/plugins/subotiz/.mcp.json @@ -0,0 +1,16 @@ +{ + "mcpServers": { + "subotiz": { + "url": "https://api.subotiz.com/mcp", + "headers": { + "Authorization": "Bearer ${SUBOTIZ_API_KEY}" + } + }, + "subotiz-sandbox": { + "url": "https://api.sandbox.subotiz.com/mcp", + "headers": { + "Authorization": "Bearer ${SUBOTIZ_SANDBOX_API_KEY}" + } + } + } +} diff --git a/plugins/subotiz/README.md b/plugins/subotiz/README.md new file mode 100644 index 000000000..5689c659c --- /dev/null +++ b/plugins/subotiz/README.md @@ -0,0 +1,50 @@ +Connect to Subotiz MCP to handle subscriptions, usage billing, payments, taxes, and invoices — and drive revenue growth. + + + +Subotiz is a global **subscription growth engine** and **MoR** platform built for **AI products, SaaS, and digital businesses**. Supporting over 180 countries and 150+ currencies, Subotiz enables developers to manage **usage-based billing, subscriptions, global payments, tax compliance, and revenue operations** all within a single platform. By integrating the Subotiz MCP, you can let your agents manage product pricing, handle subscriptions, process transactions or refunds, issue invoices to accelerate your monetization. + + + +**Learn more**: For an overview of Subotiz products and capabilities, visit the [Subotiz homepage](https://www.subotiz.com/). + +*** + +### Prerequisites + +1. A host that supports Streamable HTTP MCP (e.g. VS Code 1.101+, Claude Desktop, Cursor, Trae, etc.) + +2. A valid Subotiz access token + +*** + +### Subotiz MCP URL + +* sandbox: [https://api.sandbox.subotiz.com/mcp](https://api.sandbox.subotiz.com/mcp) + +* prod: [https://api.subotiz.com/mcp](https://api.subotiz.com/mcp) + +*** + +### MCP Configuration + +When connecting to the official hosted service, you only need to configure the URL and `Authorization: Bearer`; no other request headers are required. + +Cursor example (add to Cursor’s MCP settings): + +```json +{ + "mcpServers": { + "my-remote-server": { + "url": "{{MCP_URL}}", + "headers": { + "Authorization": "Bearer YOUR_TOKEN_HERE" + } + } + } +} +``` + +Replace `{{MCP_URL}}` with the MCP URL for your target environment and `{{YOUR_TOKEN_HERE}}` with your Subotiz access token. In hosts such as VS Code, Cursor, or Claude Desktop, merge the above into their respective MCP configuration (e.g. `servers` or `mcpServers`) to use it. + +Obtaining an API Key: The token in the configuration is your Subotiz API Key. For steps to create one and authentication details, see the [Authentication guide](https://developer.subotiz.com/v1.0-zh-cn/reference/authentication-1). diff --git a/skills/use-subotiz/SKILL.md b/skills/use-subotiz/SKILL.md new file mode 100644 index 000000000..3c361743e --- /dev/null +++ b/skills/use-subotiz/SKILL.md @@ -0,0 +1,82 @@ +--- +name: use-subotiz +description: 'Operate Subotiz billing and payments through the subotiz MCP server: list/create customers, products and prices, inspect subscriptions, trades, refunds, invoices and webhook events. Use when the user asks to manage subscriptions, set up usage-based billing, create products/prices, look up payments or invoices, issue or inspect refunds, or work with Subotiz / Merchant-of-Record revenue operations.' +--- + +# Subotiz Billing & Payments + +Use the `subotiz` MCP server for all Subotiz operations. Do not rely on training data for Subotiz endpoints, parameters, or pricing models — query the server's tools and developer docs instead. + +## When to Apply + +Apply this skill when the user: +- Manages subscriptions, plans, or usage-based billing on Subotiz +- Creates or lists products and prices +- Looks up customers, payments (trades), invoices, or webhook events +- Issues or inspects refunds +- Asks anything about Subotiz revenue operations or Merchant-of-Record flows + +## Tools + +| Tool | Purpose | +|------|---------| +| `list_customer` / `create_customer` | List or create customers | +| `list_products` / `create_product` | List or create products | +| `list_prices` / `create_price` | List or create prices | +| `list_subscription` | List subscriptions | +| `list_trades` | List payments/transactions | +| `list_refund` | List refunds for a trade | +| `list_invoice` | List invoices | +| `list_webhook_event_v2` | List webhook events (v2) | +| `get_llm_doc` / `get_llm_full_doc` | Fetch Subotiz developer documentation | + +When unsure about parameters or an endpoint not listed above, call `get_llm_doc` (condensed) or `get_llm_full_doc` (full) before guessing. + +## Example Workflow + +Set the API key for the environment you target before any call: + +```bash +export SUBOTIZ_API_KEY="sk_live_..." # production → subotiz +export SUBOTIZ_SANDBOX_API_KEY="sk_test_..." # sandbox → subotiz-sandbox +``` + +Read-only investigation — "show a customer's active subscriptions and recent payments": + +```text +list_customer(email="alex@example.com") # resolve the customer id +list_subscription(customer_id="cus_123", status="active") +list_trades(customer_id="cus_123", limit=5) +list_refund(trade_id="trd_456") # only if a refund is in question +``` + +Creating a billable resource — restate the payload, get explicit confirmation, then call: + +```text +# 1. Confirm with the user first (never auto-create): +# create_product "Pro Plan" -> create_price 2900 USD / month +# 2. Only after an explicit "yes": +create_product(name="Pro Plan", description="Pro tier") +create_price(product_id="prod_789", unit_amount=2900, currency="USD", recurring_interval="month") +``` + +## Safety Rules (payment-grade) + +Subotiz handles real money. Treat write operations as high-risk: + +1. **Confirm before any write.** Before `create_customer`, `create_product`, `create_price`, or any mutating action, restate the exact payload to the user and get explicit confirmation. Never auto-create billable resources. +2. **Refunds and charges are irreversible.** Always echo amount, currency, and the target trade/customer, and require an explicit "yes" before proceeding. +3. **Never log or echo the API key.** The token lives in the `Authorization` header / `SUBOTIZ_API_KEY` env var — never print it, never write it to files or commits. +4. **Default to read-only for discovery.** Use `list_*` tools to inspect state before proposing any change. +5. **Sandbox first.** This plugin ships two servers — `subotiz` (production) and `subotiz-sandbox`. For any experimentation or destructive testing, prefer the `subotiz-sandbox` tools so no real money or live customer data is touched. + +## Setup + +This plugin ships two remote MCP servers via `.mcp.json`: + +| Server | Environment | API key env var | +|--------|-------------|-----------------| +| `subotiz` | Production | `SUBOTIZ_API_KEY` | +| `subotiz-sandbox` | Sandbox / testing | `SUBOTIZ_SANDBOX_API_KEY` | + +The user only needs to set the key(s) for the environment(s) they use; the other server simply stays disconnected (harmless). If a tool call returns `401 Unauthorized`, the matching key is missing, expired, or lacks the `Bearer ` prefix — tell the user to set/rotate the right env var. Key creation: https://developer.subotiz.com/v1.0-zh-cn/reference/authentication-1