@wickedlabs/wicked-mcp 0.7.2 → 0.7.3
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.
- package/README.md +4 -1
- package/dist/landing.js +1 -1
- package/dist/prompts.js +70 -0
- package/dist/server.js +1 -1
- package/dist/suite.js +4 -1
- package/dist/toolMeta.js +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ MCP server for the whole [Wicked](https://wickedapi.com) suite — trading data,
|
|
|
19
19
|
| [Wicked Memory](https://memory.wickedapi.com) | 8 (`memory_prepare`, `memory_store`, `memory_search`, …) | wallet signature on every call; only search is metered |
|
|
20
20
|
| [x402 Paywall](https://paywall.wickedapi.com) | 8 (`paywall_*`) | `paywall_signup` is open; the rest need the tenant key |
|
|
21
21
|
|
|
22
|
-
Plus **6 resources** (the platform directory, `llms.txt`, and each service's live endpoint catalog) and **
|
|
22
|
+
Plus **6 resources** (the platform directory, `llms.txt`, and each service's live endpoint catalog) and **10 prompts** (`rug_check`, `vet_dependency`, `morning_briefing`, `fact_check`, `verify_agent`, `find_reliable_tool`, `agent_memory_guide`) that chain tools together the way the [cookbook](../cookbooks/wickedapi-cookbook.md) does.
|
|
23
23
|
|
|
24
24
|
These tools never sign anything or hold a key. Agents with no wallet can still try Wicked Identity end to end through a sandbox identity (`identity_sandbox_register`, then pass `sandbox_token` instead of a signature); sandbox results are for testing and are never reported as verified. Identity (real wallet), Registry registration and Memory take a signature you produce with your own wallet (`identity_get_nonce` / `memory_prepare` return the exact message to sign). Calls that need x402 payment return the real `402` challenge (decoded under `payment_required` for x402 v2) rather than auto-paying — `WICKEDAPI_PAYER_PRIVATE_KEY` auto-pay applies to the Trading, Protocol Health, Token Risk and Broker Sync tools.
|
|
25
25
|
|
|
@@ -97,6 +97,9 @@ One-click workflows that chain real tool calls (Claude Desktop and other prompt-
|
|
|
97
97
|
- **`verify_agent`** (`wallet`) — Identity assertion + Reputation stake/tier before you transact with an agent.
|
|
98
98
|
- **`find_reliable_tool`** (`need`, optional `category`, `min_score`) — Registry search by real uptime/latency/schema scores.
|
|
99
99
|
- **`agent_memory_guide`** (`wallet`, `task`) — the two-step signed Memory flow, explained to the model.
|
|
100
|
+
- **`counterparty_check`** (`address`) — OFAC screening and wallet risk (plus Identity/Reputation) before you pay someone.
|
|
101
|
+
- **`insider_watch`** (`ticker`, optional `days`) — insider trades, insider summary and 8-K events for a stock.
|
|
102
|
+
- **`trade_idea_check`** (`symbol`, optional `timeframe`) — verdict, volatility, positioning and news for a trade idea.
|
|
100
103
|
|
|
101
104
|
## Environment variables
|
|
102
105
|
|
package/dist/landing.js
CHANGED
|
@@ -16,7 +16,7 @@ const GROUPS = [
|
|
|
16
16
|
{ id: "wallet", label: "Wallet Oracle", prefix: "wallet_", blurb: "Counterparty check: OFAC sanctions, malicious-address flags and on-chain profile for any EVM wallet." },
|
|
17
17
|
{ id: "paywall", label: "x402 Paywall", prefix: "paywall_", blurb: "Put any endpoint behind pay-per-call USDC." },
|
|
18
18
|
];
|
|
19
|
-
export const PROMPT_NAMES = ["rug_check", "vet_dependency", "morning_briefing", "fact_check", "verify_agent", "find_reliable_tool", "agent_memory_guide"];
|
|
19
|
+
export const PROMPT_NAMES = ["rug_check", "vet_dependency", "morning_briefing", "fact_check", "verify_agent", "find_reliable_tool", "agent_memory_guide", "counterparty_check", "insider_watch", "trade_idea_check"];
|
|
20
20
|
function grouped(tools) {
|
|
21
21
|
const claimed = new Set();
|
|
22
22
|
const out = GROUPS.map((g) => {
|
package/dist/prompts.js
CHANGED
|
@@ -82,4 +82,74 @@ export function registerSuitePrompts(server) {
|
|
|
82
82
|
`Report exactly what the tools returned.`),
|
|
83
83
|
],
|
|
84
84
|
}));
|
|
85
|
+
server.registerPrompt("counterparty_check", {
|
|
86
|
+
title: "Check a counterparty before you pay",
|
|
87
|
+
description: "Screen a wallet or contract before sending funds: OFAC sanctions, malicious-address flags, and (if it is an agent) its identity and stake.",
|
|
88
|
+
argsSchema: { address: z.string().describe("The 0x wallet or contract address you are about to transact with.") },
|
|
89
|
+
}, ({ address }) => ({
|
|
90
|
+
description: "Counterparty screening",
|
|
91
|
+
messages: [
|
|
92
|
+
text(`Before I send anything to ${address}, screen it with real data - never guess:
|
|
93
|
+
|
|
94
|
+
` +
|
|
95
|
+
`1. Call \`wallet_sanctions_check\` (free) with the address. Report whether it is on the OFAC SDN list and the sanctioned entity if so.
|
|
96
|
+
` +
|
|
97
|
+
`2. Call \`wallet_check\` for the broader pre-transaction check (malicious-address flags and on-chain signals). If it returns http_status 402, show me the price from payment_required and continue with what is free.
|
|
98
|
+
` +
|
|
99
|
+
`3. If this address is an agent I might deal with repeatedly, also call \`identity_status\` and \`reputation_status\` for it (a 404 from reputation means never registered, not an error).
|
|
100
|
+
|
|
101
|
+
` +
|
|
102
|
+
`Summarize: sanctioned or not, any flags, and what is unknown. These are signals, not a guarantee.`),
|
|
103
|
+
],
|
|
104
|
+
}));
|
|
105
|
+
server.registerPrompt("insider_watch", {
|
|
106
|
+
title: "Insider and filings watch",
|
|
107
|
+
description: "For a stock ticker, combine recent insider trading, an insider summary and classified 8-K events from SEC filings.",
|
|
108
|
+
argsSchema: {
|
|
109
|
+
ticker: z.string().describe('US stock ticker, e.g. "NVDA".'),
|
|
110
|
+
days: z.string().optional().describe("Lookback window in days (default 30)."),
|
|
111
|
+
},
|
|
112
|
+
}, ({ ticker, days }) => ({
|
|
113
|
+
description: "Insider and filings watch",
|
|
114
|
+
messages: [
|
|
115
|
+
text(`Build an insider and filings view of ${ticker} over the last ${days || "30"} days using real data only:
|
|
116
|
+
|
|
117
|
+
` +
|
|
118
|
+
`1. \`filings_insider_summary\` for the ticker: open-market buy and sell counts and dollar totals.
|
|
119
|
+
` +
|
|
120
|
+
`2. \`filings_insider_trades\` for the individual Form 4 trades (insider, role, code, size). Report exact values.
|
|
121
|
+
` +
|
|
122
|
+
`3. \`filings_8k_events\` for material events (earnings, executive changes, agreements).
|
|
123
|
+
` +
|
|
124
|
+
`4. Optionally \`earnings_calendar\` for the next report date.
|
|
125
|
+
|
|
126
|
+
` +
|
|
127
|
+
`If any call returns http_status 402, show the price from payment_required rather than guessing. Then summarize what the filings actually show; do not speculate beyond them.`),
|
|
128
|
+
],
|
|
129
|
+
}));
|
|
130
|
+
server.registerPrompt("trade_idea_check", {
|
|
131
|
+
title: "Check a trade idea",
|
|
132
|
+
description: "Pressure-test a trade on one asset with the verdict engine, volatility, positioning and fresh news, without inventing numbers.",
|
|
133
|
+
argsSchema: {
|
|
134
|
+
symbol: z.string().describe("Asset symbol, e.g. BTC, ETH, SOL, NVDA."),
|
|
135
|
+
timeframe: z.string().optional().describe("Timeframe such as 1h or 1D (default 1h)."),
|
|
136
|
+
},
|
|
137
|
+
}, ({ symbol, timeframe }) => ({
|
|
138
|
+
description: "Trade idea check",
|
|
139
|
+
messages: [
|
|
140
|
+
text(`Pressure-test a trade on ${symbol} (${timeframe || "1h"}) from real tool output only:
|
|
141
|
+
|
|
142
|
+
` +
|
|
143
|
+
`1. \`verdict\` for the bias, confidence, thesis, entry, invalidation and targets.
|
|
144
|
+
` +
|
|
145
|
+
`2. \`atr\` for volatility and regime (size the stop from it).
|
|
146
|
+
` +
|
|
147
|
+
`3. For crypto: \`funding_oi\` and \`long_short_ratio\` for crowding; \`liquidity_levels\` for nearby pools.
|
|
148
|
+
` +
|
|
149
|
+
`4. \`crypto_news\` for fresh headlines that could invalidate the idea.
|
|
150
|
+
|
|
151
|
+
` +
|
|
152
|
+
`Quote exact values. If a call returns 402, show the price instead of guessing. End with a plain verdict and what would invalidate it. This is analysis from tools, not financial advice.`),
|
|
153
|
+
],
|
|
154
|
+
}));
|
|
85
155
|
}
|
package/dist/server.js
CHANGED
package/dist/suite.js
CHANGED
|
@@ -22,7 +22,9 @@ const REGISTRY_URL = envUrl("REGISTRY_BASE_URL", "https://registry.wickedapi.com
|
|
|
22
22
|
const IDENTITY_URL = envUrl("IDENTITY_BASE_URL", "https://verify.wickedapi.com");
|
|
23
23
|
const SANITY_URL = envUrl("SANITY_BASE_URL", "https://sanity.wickedapi.com");
|
|
24
24
|
const MEMORY_URL = envUrl("MEMORY_BASE_URL", "https://memory.wickedapi.com");
|
|
25
|
-
|
|
25
|
+
// The tenant/config API lives on paywall-admin; paywall.wickedapi.com is the gateway that serves the paid routes.
|
|
26
|
+
const PAYWALL_URL = envUrl("PAYWALL_BASE_URL", "https://paywall-admin.wickedapi.com");
|
|
27
|
+
const PAYWALL_GATEWAY_URL = envUrl("PAYWALL_GATEWAY_URL", "https://paywall.wickedapi.com");
|
|
26
28
|
const REGISTRY_API_KEY = process.env.REGISTRY_API_KEY || "";
|
|
27
29
|
const IDENTITY_API_KEY = process.env.IDENTITY_API_KEY || "";
|
|
28
30
|
const SANITY_API_KEY = process.env.SANITY_API_KEY || "";
|
|
@@ -450,6 +452,7 @@ export function registerSuiteTools(server) {
|
|
|
450
452
|
description: z.string().optional().describe("Up to 200 chars: letters, digits, space . _ -"),
|
|
451
453
|
upstreamUrl: z.string().optional().describe("Your https backend. Omit for the demo confirmation payload."),
|
|
452
454
|
};
|
|
455
|
+
tool("paywall_demo_weather", "[x402 Paywall] Call the live demo route on the paywall gateway (GET /wickedapi/weather) to see a real x402 challenge: unpaid, it returns HTTP 402 with the decoded price, network and payTo in payment_required. A safe way to learn what a paywalled endpoint looks like before creating your own.", {}, () => call("GET", PAYWALL_GATEWAY_URL, "/wickedapi/weather"));
|
|
453
456
|
tool("paywall_signup", "[x402 Paywall] Create a tenant account. Returns a Bearer apiKey ONCE — store it and set PAYWALL_API_KEY. Rate-limited to 5/hour per IP.", {
|
|
454
457
|
name: z.string().describe("Letters, digits, space . _ - (max 100)."),
|
|
455
458
|
slug: z.string().describe("Lowercase a-z0-9 and hyphens, 2-40 chars; becomes your mount path prefix /{slug}."),
|
package/dist/toolMeta.js
CHANGED
|
@@ -108,6 +108,7 @@ const USAGE = {
|
|
|
108
108
|
memory_delete: { u: "you must permanently erase a memory (right to be forgotten).", n: "correcting it (use memory_update, which keeps history)." },
|
|
109
109
|
memory_deletions: { u: "you want your audit log of deletions (ids, times, reasons, never content).", n: "recovering content, which is gone." },
|
|
110
110
|
// --- Paywall ---
|
|
111
|
+
paywall_demo_weather: { u: "you want to see a real x402 payment challenge from a paywalled route (price, network, payTo) without creating anything.", n: "setting up your own paywall (use paywall_signup then paywall_create_route)." },
|
|
111
112
|
paywall_signup: { u: "you want a paywall tenant account and its API key (shown once).", n: "managing routes of an existing tenant." },
|
|
112
113
|
paywall_get_tenant: { u: "you want your tenant record (name, slug, key hint).", n: "route management." },
|
|
113
114
|
paywall_list_routes: { u: "you want your paywalled routes and their prices.", n: "earnings (use paywall_list_settlements)." },
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wickedlabs/wicked-mcp",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.3",
|
|
4
4
|
"description": "MCP server for the whole Wicked suite — trading data, DeFi protocol health, token safety, SEC filings alerts, wallet and sanctions checks, brokerage sync, agent identity, reputation, tool registry, hallucination checks, persistent memory, and x402 paywalls. 100+ tools, 6 resources, 3 prompts. No signup required: pay per call in USDC via x402, or use a partner API key.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|