Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .agents/plugins/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{
"name": "deriv-api-marketplace",
"name": "deriv",
"interface": {
"displayName": "Deriv API"
"displayName": "deriv"
},
"plugins": [
{
"name": "deriv-api",
"name": "deriv",
"source": {
"source": "local",
"path": "./"
Expand Down
8 changes: 4 additions & 4 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
{
"name": "deriv-api-marketplace",
"name": "deriv",
"owner": {
"name": "Deriv",
"name": "deriv",
"email": "api-support@deriv.com",
"url": "https://developers.deriv.com"
},
"description": "Deriv API plugin marketplace — live schema queries and task-based guides for the Deriv trading API.",
"plugins": [
{
"name": "deriv-api",
"name": "deriv",
"source": "./",
"displayName": "Deriv API (Beta)",
"displayName": "deriv",
"homepage": "https://developers.deriv.com",
"description": "Get live Deriv API schemas plus guides for authentication, subscriptions, trades, and errors.",
"category": "payments",
Expand Down
8 changes: 4 additions & 4 deletions .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"name": "deriv-api",
"displayName": "Deriv API (Beta)",
"version": "2.0.2",
"name": "deriv",
"displayName": "deriv",
"version": "1.0.0",
"description": "Get live Deriv API schemas plus guides for authentication, subscriptions, trades, and errors.",
"author": { "name": "Deriv", "email": "api-support@deriv.com" },
"author": { "name": "deriv", "email": "api-support@deriv.com" },
"homepage": "https://developers.deriv.com",
"repository": "https://github.com/deriv-com/deriv-api-plugin",
"license": "MIT",
Expand Down
11 changes: 6 additions & 5 deletions .codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"name": "deriv-api",
"version": "2.0.2",
"name": "deriv",
"version": "1.0.0",
"description": "Get live Deriv API schemas plus guides for authentication, subscriptions, trades, and errors.",
"author": {
"name": "Deriv",
"name": "deriv",
"email": "api-support@deriv.com",
"url": "https://developers.deriv.com"
},
Expand All @@ -21,11 +21,12 @@
"fintech"
],
"mcpServers": "./.mcp.json",
"skills": "./skills/",
"interface": {
"displayName": "Deriv API (Beta)",
"displayName": "deriv",
"shortDescription": "Get live Deriv API schemas",
"longDescription": "Get live Deriv API schemas plus guides for authentication, subscriptions, trades, and errors. Search endpoints, read current request and response fields, take worked examples, and validate payloads. The plugin does not sign in to a Deriv account, store keys, or place trades.",
"developerName": "Deriv",
"developerName": "deriv",
"category": "Developer Tools",
"capabilities": ["Read"],
"websiteURL": "https://developers.deriv.com",
Expand Down
20 changes: 8 additions & 12 deletions .cursor-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,21 +1,17 @@
{
"name": "deriv-api-marketplace",
"name": "deriv",
"owner": {
"name": "Deriv",
"email": "api-support@deriv.com",
"url": "https://developers.deriv.com"
"name": "deriv",
"email": "api-support@deriv.com"
},
"metadata": {
"description": "Deriv API plugin marketplace — live schema queries and task-based guides for the Deriv trading API."
},
"description": "Deriv API plugin marketplace — live schema queries and task-based guides for the Deriv trading API.",
"plugins": [
{
"name": "deriv-api",
"name": "deriv",
"source": "./",
"displayName": "Deriv API (Beta)",
"homepage": "https://developers.deriv.com",
"description": "Get live Deriv API schemas plus guides for authentication, subscriptions, trades, and errors.",
"category": "payments",
"tags": ["trading", "fintech", "api", "websocket"],
"logo": "https://raw.githubusercontent.com/deriv-com/deriv-api-plugin/master/assets/logo.png"
"description": "Get live Deriv API schemas plus guides for authentication, subscriptions, trades, and errors."
}
]
}
11 changes: 6 additions & 5 deletions .cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
{
"name": "deriv-api",
"displayName": "Deriv API (Beta)",
"version": "2.0.2",
"name": "deriv",
"displayName": "deriv",
"version": "1.0.0",
"description": "Get live Deriv API schemas plus guides for authentication, subscriptions, trades, and errors.",
"author": { "name": "Deriv", "email": "api-support@deriv.com" },
"author": { "name": "deriv", "email": "api-support@deriv.com" },
"homepage": "https://developers.deriv.com",
"repository": "https://github.com/deriv-com/deriv-api-plugin",
"license": "MIT",
"logo": "https://raw.githubusercontent.com/deriv-com/deriv-api-plugin/master/assets/logo.png",
"category": "payments",
"tags": ["trading", "fintech", "api", "websocket"],
"keywords": ["deriv", "trading", "api", "websocket", "rest", "options", "finance", "fintech"],
"rules": "./rules/"
"rules": "./rules/",
"skills": "./skills/"
}
104 changes: 96 additions & 8 deletions .github/workflows/verify-surface.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,104 @@ const ALLOW = new Set([
'.codex-plugin/plugin.json',
'.agents/plugins/marketplace.json',
'rules/deriv-api-conventions.mdc',
'assets/logo.svg',
'assets/logo.png',
'assets/logo-dark.svg',
'assets/logo-dark.png',
'LICENSE',
'README.md',
'CONTRIBUTING.md',
'SECURITY.md',
'PRIVACY.md',
'skills/deriv-auth/SKILL.md',
'skills/deriv-auth/agents/openai.yaml',
'skills/deriv-auth/references/implementation-checklist.md',
'skills/deriv-llms/SKILL.md',
'skills/deriv-llms/references/account-nickname.md',
'skills/deriv-llms/references/active-symbols.md',
'skills/deriv-llms/references/api-overview.md',
'skills/deriv-llms/references/authentication.md',
'skills/deriv-llms/references/auto-get.md',
'skills/deriv-llms/references/auto-list-strategies.md',
'skills/deriv-llms/references/auto-list.md',
'skills/deriv-llms/references/auto-pause.md',
'skills/deriv-llms/references/auto-resume.md',
'skills/deriv-llms/references/auto-start.md',
'skills/deriv-llms/references/auto-stop.md',
'skills/deriv-llms/references/balance.md',
'skills/deriv-llms/references/bulk-purchase.md',
'skills/deriv-llms/references/buy.md',
'skills/deriv-llms/references/cancel.md',
'skills/deriv-llms/references/contract-types.md',
'skills/deriv-llms/references/contract-update-history.md',
'skills/deriv-llms/references/contract-update.md',
'skills/deriv-llms/references/contracts-for.md',
'skills/deriv-llms/references/contracts-list.md',
'skills/deriv-llms/references/create-account.md',
'skills/deriv-llms/references/errors.md',
'skills/deriv-llms/references/examples.md',
'skills/deriv-llms/references/forget-all.md',
'skills/deriv-llms/references/forget.md',
'skills/deriv-llms/references/get-accounts.md',
'skills/deriv-llms/references/getting-started.md',
'skills/deriv-llms/references/health.md',
'skills/deriv-llms/references/markup-statistics.md',
'skills/deriv-llms/references/oauth.md',
'skills/deriv-llms/references/payment-agent-client-settings-update.md',
'skills/deriv-llms/references/payment-agent-client-settings.md',
'skills/deriv-llms/references/payment-agent-get.md',
'skills/deriv-llms/references/payment-agent-list.md',
'skills/deriv-llms/references/payment-agent-statistics.md',
'skills/deriv-llms/references/payment-agent-transfer-status.md',
'skills/deriv-llms/references/payment-agent-transfer.md',
'skills/deriv-llms/references/payment-agent-withdraw-status.md',
'skills/deriv-llms/references/payment-agent-withdraw-verification.md',
'skills/deriv-llms/references/payment-agent-withdraw.md',
'skills/deriv-llms/references/ping.md',
'skills/deriv-llms/references/portfolio.md',
'skills/deriv-llms/references/profit-table.md',
'skills/deriv-llms/references/proposal-open-contract.md',
'skills/deriv-llms/references/proposal.md',
'skills/deriv-llms/references/reset-demo-balance.md',
'skills/deriv-llms/references/sell.md',
'skills/deriv-llms/references/statement.md',
'skills/deriv-llms/references/ticks-history.md',
'skills/deriv-llms/references/ticks.md',
'skills/deriv-llms/references/time.md',
'skills/deriv-llms/references/trading-times.md',
'skills/deriv-llms/references/transaction.md',
'skills/deriv-llms/references/wallet-list.md',
'skills/deriv-llms/references/wallet-transactions.md',
'skills/deriv-llms/references/websocket.md',
'skills/deriv-llms/references/workflows.md',
'skills/deriv-llms/references/ws-demo.md',
'skills/deriv-llms/references/ws-public.md',
'skills/deriv-llms/references/ws-real.md',
'skills/deriv-market-data/SKILL.md',
'skills/deriv-market-data/agents/openai.yaml',
'skills/deriv-market-data/references/implementation-checklist.md',
'skills/deriv-trade-lifecycle/SKILL.md',
'skills/deriv-trade-lifecycle/agents/openai.yaml',
'skills/deriv-trade-lifecycle/references/implementation-checklist.md',
'skills/deriv-trade-types/SKILL.md',
'skills/deriv-trade-types/agents/openai.yaml',
'skills/deriv-trade-types/references/accumulators.md',
'skills/deriv-trade-types/references/advanced.md',
'skills/deriv-trade-types/references/barrier-options.md',
'skills/deriv-trade-types/references/catalog.md',
'skills/deriv-trade-types/references/digits.md',
'skills/deriv-trade-types/references/multipliers.md',
'skills/deriv-trade-types/references/up-down.md',
'skills/deriv-trade-types/references/vanilla-turbos.md',
'skills/deriv-trading-app/SKILL.md',
'skills/deriv-trading-app/agents/openai.yaml',
'skills/deriv-trading-app/references/new-api-only.md',
'skills/deriv-llms/references/partners-analytics-overview.md',
'skills/deriv-llms/references/partners-client-tags-check.md',
'skills/deriv-llms/references/wallet-exchange-rate.md',
'skills/deriv-llms/references/wallet-transfer-exchange.md',
'skills/deriv-llms/references/wallet-transfer-platforms.md',
'skills/deriv-llms/references/wallet-transfer-validate.md',
'skills/deriv-llms/references/wallet-transfer.md',
'skills/deriv-trading-app/references/chart-selection.md',
]);

// NOTE: there is deliberately NO internal-hostnames gate here. Internal hostname
Expand Down Expand Up @@ -80,7 +169,7 @@ const CONTENT_GATES = [
new RegExp('\\b' + ['ds', 'tp'].join('') + '\\b'),
/PLAN\.md/,
/(^|[\s"'(/])specs\//m,
/\.claude\//,
/(?<!~\/)\.claude\//,
new RegExp('\\.' + ['build', 'wright'].join('')),
new RegExp('\\.' + ['spec', 'to', 'pr'].join('-')),
/AGENTS\.md/,
Expand All @@ -91,7 +180,6 @@ const CONTENT_GATES = [
id: 'local-runtime',
patterns: [
/(^|[\s"'(/])mcp\//m,
/(^|[\s"'(/])skills\//m,
/node_modules/,
/(^|[\s"'(/])dist\//m,
],
Expand Down Expand Up @@ -228,18 +316,18 @@ const codex = loadJson('.codex-plugin/plugin.json');
if (codex) {
const iface = codex.interface && typeof codex.interface === 'object' ? codex.interface : null;
if (!iface) fail('codex listing: interface object is required');
if (codex.name !== 'deriv-api') fail('codex listing: name must be deriv-api');
if (codex.name !== 'deriv') fail('codex listing: name must be deriv');
if (typeof codex.version !== 'string' || !SEMVER.test(codex.version)) {
fail('codex listing: version must be semver');
}
if (typeof codex.description !== 'string' || !codex.description || codex.description.length > 1024) {
fail('codex listing: description is required and must be 1024 characters or fewer');
}
if (!codex.author || codex.author.name !== 'Deriv') fail('codex listing: author.name must be Deriv');
if (!codex.author || codex.author.name !== 'deriv') fail('codex listing: author.name must be deriv');
if (codex.mcpServers !== './.mcp.json') {
fail('codex listing: mcpServers must be ./.mcp.json so the hosted server is imported');
}
if (codex.skills != null) fail('codex listing: skills must be omitted; this plugin has no skills/ tree');
if (codex.skills !== './skills/') fail('codex listing: skills must be ./skills/');
if (codex.apps != null) fail('codex listing: apps must be omitted; there is no .app.json');
if (iface) {
if (iface.developerName !== codex.author.name) {
Expand Down Expand Up @@ -294,7 +382,7 @@ if (marketplace) {
const entry = Array.isArray(marketplace.plugins) ? marketplace.plugins[0] : null;
if (!entry) fail('codex listing: marketplace must declare one plugin entry');
else {
if (entry.name !== 'deriv-api') fail('codex listing: marketplace plugin name must be deriv-api');
if (entry.name !== 'deriv') fail('codex listing: marketplace plugin name must be deriv');
if (!entry.source || entry.source.source !== 'local' || entry.source.path !== './') {
fail('codex listing: marketplace source must be local path ./');
}
Expand Down
4 changes: 2 additions & 2 deletions .mcp.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"mcpServers": {
"deriv-api": {
"deriv": {
"type": "http",
"url": "https://deriv-api-mcp-staging-196353059748.us-central1.run.app/mcp"
"url": "https://mcp-api-v2.deriv.com/mcp"
}
}
}
8 changes: 4 additions & 4 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

Thanks for your interest in improving the Deriv API plugin.

The plugin is a thin client that points **Cursor** and **Claude Code** at a
hosted Deriv API MCP server and ships one Cursor rule. It holds no credentials
and runs no local server, so most contributions are to the documentation, the
manifests, or the Cursor rule.
See [`README.md`](README.md) for how to install. Partners install it as
**deriv**. The Cursor local-clone path is `~/.cursor/plugins/local/deriv`.

Contributions are to documentation, manifests, and bundled skills.

## How to contribute

Expand Down
15 changes: 10 additions & 5 deletions PRIVACY.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ This document describes what data the Deriv API plugin does and does not handle.

## Data flow

The plugin is a thin client. When one of its tools is called, the request is
sent to the Deriv-hosted MCP server whose URL is declared in `.mcp.json`, and
that hosted server is what fetches public Deriv API documentation and schemas
from the Deriv developer docs host. Your queries therefore reach Deriv
infrastructure — they are not answered entirely within the MCP host.
When one of its tools is called, the request is sent to the Deriv-hosted MCP
server whose URL is declared in `.mcp.json`, and that hosted server is what
fetches public Deriv API documentation and schemas from the Deriv developer docs
host. Your queries therefore reach Deriv infrastructure — they are not answered
entirely within the MCP host.

What reaches the Deriv-hosted server on each call is:

Expand All @@ -23,6 +23,11 @@ What reaches the Deriv-hosted server on each call is:
The plugin does not add any account, profile, or credential to these requests —
what it sends is the tool call the agent made, and nothing more.

When the hosted MCP is down, the bundled skill files that ship with the plugin
are read locally on the developer's machine. That local read is not a tool call:
it does not send those queries to the Deriv-hosted server. When MCP is used,
tool-call queries still reach Deriv infrastructure as described above.

## Analytics

Analytics on the hosted server is **disabled by default**. It is enabled only
Expand Down
Loading
Loading