solana-agent-kit-plugin-madeonsol 1.4.0 → 1.6.0
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 +82 -5
- package/dist/actions/deployerAlerts.d.ts +45 -0
- package/dist/actions/deployerAlerts.js +28 -0
- package/dist/actions/kolAlertsRecent.d.ts +46 -0
- package/dist/actions/kolAlertsRecent.js +27 -0
- package/dist/actions/kolCompare.d.ts +33 -0
- package/dist/actions/kolCompare.js +24 -0
- package/dist/actions/kolCoordination.d.ts +42 -0
- package/dist/actions/kolCoordination.js +24 -0
- package/dist/actions/kolFeed.d.ts +42 -0
- package/dist/actions/kolFeed.js +24 -0
- package/dist/actions/kolFirstTouches.d.ts +82 -0
- package/dist/actions/kolFirstTouches.js +47 -0
- package/dist/actions/kolLeaderboard.d.ts +38 -0
- package/dist/actions/kolLeaderboard.js +23 -0
- package/dist/actions/kolPnl.d.ts +38 -0
- package/dist/actions/kolPnl.js +23 -0
- package/dist/actions/kolTokenEntryOrder.d.ts +38 -0
- package/dist/actions/kolTokenEntryOrder.js +23 -0
- package/dist/actions/kolTrendingTokens.d.ts +42 -0
- package/dist/actions/kolTrendingTokens.js +24 -0
- package/dist/actions/walletTracker.d.ts +176 -0
- package/dist/actions/walletTracker.js +106 -0
- package/dist/index.d.ts +660 -0
- package/dist/index.js +82 -0
- package/dist/tools/index.d.ts +248 -0
- package/dist/tools/index.js +314 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,6 +4,22 @@
|
|
|
4
4
|
|
|
5
5
|
> Real-time Solana trading intelligence: track 1,000+ KOL wallets with <3s latency, score 6,700+ Pump.fun deployers by reputation, detect multi-KOL coordination signals, monitor any Solana wallet for swaps and transfers, and stream every DEX trade. Free tier: 200 requests/day at [madeonsol.com/developer](https://madeonsol.com/developer) — no credit card required.
|
|
6
6
|
|
|
7
|
+
> **New in 1.6.0** *(2026-05-09)* — **Market-cap filtering everywhere.** `min_mc_usd` / `max_mc_usd` on `kolFeed`, `kolCoordination`, `kolFirstTouches`, and `copytradeSignals` lets your agent scope every signal request to a specific MC band ("hunt only sub-$50K alpha", "skip everything over $5M"). Same fields on persistent alert rules (coordination + first-touches subscriptions). Deprecated `avg_entry_mc_usd` removed from leaderboards.
|
|
8
|
+
|
|
9
|
+
## Quick start (10 seconds)
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install solana-agent-kit-plugin-madeonsol
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { SolanaAgentKit } from "solana-agent-kit";
|
|
17
|
+
import MadeOnSolPlugin from "solana-agent-kit-plugin-madeonsol";
|
|
18
|
+
const agent = new SolanaAgentKit(privateKey, rpcUrl, { MADEONSOL_API_KEY: "msk_..." }); // free key: https://madeonsol.com/developer
|
|
19
|
+
agent.use(MadeOnSolPlugin);
|
|
20
|
+
const trades = await agent.methods.kolFeed(agent, { limit: 5, action: "buy" });
|
|
21
|
+
```
|
|
22
|
+
|
|
7
23
|
## Authentication
|
|
8
24
|
|
|
9
25
|
Two options (in priority order):
|
|
@@ -57,6 +73,7 @@ const events = await agent.methods.walletTrackerTrades(agent, { limit: 50 });
|
|
|
57
73
|
| `MADEONSOL_DEPLOYER_ALERTS_ACTION` | "deployer alerts", "pump fun launches" |
|
|
58
74
|
| `MADEONSOL_KOL_PNL_ACTION` | "kol pnl", "kol profit", "wallet pnl" |
|
|
59
75
|
| `MADEONSOL_KOL_TRENDING_TOKENS_ACTION` | "kol trending tokens", "kol volume" |
|
|
76
|
+
| `MADEONSOL_KOL_FIRST_TOUCHES_ACTION` | "kol first touch", "first kol buyer", "scout signal" — backtested first-mover signal (new in 1.3) |
|
|
60
77
|
| `MADEONSOL_WALLET_TRACKER_WATCHLIST_ACTION` | "wallet watchlist", "tracked wallets" |
|
|
61
78
|
| `MADEONSOL_WALLET_TRACKER_ADD_ACTION` | "track wallet", "watch wallet", "add to watchlist" |
|
|
62
79
|
| `MADEONSOL_WALLET_TRACKER_REMOVE_ACTION` | "untrack wallet", "remove from watchlist" |
|
|
@@ -72,7 +89,7 @@ These are exposed via `agent.methods.*` (no LLM action wrappers — call directl
|
|
|
72
89
|
Scored from 47,000+ early-buyer records (wallets seen in the first 20 buyers of Pump.fun tokens).
|
|
73
90
|
|
|
74
91
|
```ts
|
|
75
|
-
await agent.methods.alphaLeaderboard(agent, { limit: 100 }); //
|
|
92
|
+
await agent.methods.alphaLeaderboard(agent, { limit: 100 }); // Free/Pro=100, ULTRA=500 + bot signals
|
|
76
93
|
await agent.methods.alphaWallet(agent, { wallet: "WALLET" }); // ULTRA only — full breakdown + bot signals
|
|
77
94
|
await agent.methods.alphaLinked(agent, { wallet: "WALLET" }); // ULTRA only — co-bought 3+ tokens within 2s
|
|
78
95
|
```
|
|
@@ -99,6 +116,65 @@ await agent.methods.copyTradeCreate(agent, {
|
|
|
99
116
|
await agent.methods.copyTradeSignals(agent, { limit: 50 }); // up to 7 days
|
|
100
117
|
```
|
|
101
118
|
|
|
119
|
+
### KOL Coordination Alerts (PRO/ULTRA — v1.1 push signals)
|
|
120
|
+
|
|
121
|
+
Real-time push alerts when a KOL cluster co-buys the same token. Fires within ~1s of the triggering trade (pg_notify push, not polling). Delivered via WebSocket (`kol:coordination` channel, user-scoped) and/or HMAC-signed webhook. PRO=5 rules, ULTRA=20.
|
|
122
|
+
|
|
123
|
+
```ts
|
|
124
|
+
const res = await agent.methods.coordinationAlertsCreate(agent, {
|
|
125
|
+
name: "fresh pump cluster",
|
|
126
|
+
min_kols: 4,
|
|
127
|
+
window_minutes: 15, // peak-density window (1-60)
|
|
128
|
+
min_score: 70, // 0-100 composite score cutoff
|
|
129
|
+
include_majors: false, // filter WIF/BONK/POPCAT
|
|
130
|
+
cooldown_min: 60,
|
|
131
|
+
score_jump_break: 10,
|
|
132
|
+
delivery_mode: "both",
|
|
133
|
+
webhook_url: "https://you.com/hooks/coord",
|
|
134
|
+
});
|
|
135
|
+
// store res.webhook_secret — shown ONCE
|
|
136
|
+
|
|
137
|
+
await agent.methods.coordinationAlertsList(agent);
|
|
138
|
+
await agent.methods.coordinationAlertsGet(agent, { rule_id: "uuid..." });
|
|
139
|
+
await agent.methods.coordinationAlertsUpdate(agent, { rule_id: "uuid...", updates: { is_active: false } });
|
|
140
|
+
await agent.methods.coordinationAlertsDelete(agent, { rule_id: "uuid..." });
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
The v1.1 `kolCoordination()` response also includes `peak_kols`, `peak_buys`, `exited_count`, and `coordination_score` (0-100). Pass `{ min_score, window_minutes, include_majors }` to filter.
|
|
144
|
+
|
|
145
|
+
### KOL First-Touch Signal *(new in 1.3)*
|
|
146
|
+
|
|
147
|
+
Every "first KOL buy on a token mint" event — when a tracked KOL is the first of the cohort to touch a token. Filterable by **scout tier** (S/A/B/C from `mv_kol_scout_score`), KOL winrate, token age, mint suffix.
|
|
148
|
+
|
|
149
|
+
**Backtest:** S-tier scouts attract ≥3 follow-on KOLs within 4h ~50% of the time vs ~14% baseline (38d / 491k buys / 72,549 events). Public leaderboard at [madeonsol.com/kol/scouts](https://madeonsol.com/kol/scouts).
|
|
150
|
+
|
|
151
|
+
```ts
|
|
152
|
+
// REST query — also exposed as MADEONSOL_KOL_FIRST_TOUCHES_ACTION for the agent
|
|
153
|
+
const { events } = await agent.methods.kolFirstTouches(agent, {
|
|
154
|
+
preset: "scout",
|
|
155
|
+
min_scout_tier: "S",
|
|
156
|
+
limit: 20,
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
// Webhook subscription (Ultra only) — push delivery, HMAC-signed
|
|
160
|
+
const res = await agent.methods.firstTouchSubscriptionsCreate(agent, {
|
|
161
|
+
name: "S-tier scouts on pump tokens",
|
|
162
|
+
filters: { min_scout_tier: "S", mint_suffix: "pump" },
|
|
163
|
+
delivery_mode: "webhook",
|
|
164
|
+
webhook_url: "https://you.com/hooks/scout",
|
|
165
|
+
});
|
|
166
|
+
// store res.webhook_secret — shown ONCE
|
|
167
|
+
|
|
168
|
+
await agent.methods.firstTouchSubscriptionsList(agent);
|
|
169
|
+
await agent.methods.firstTouchSubscriptionsGet(agent, { subscription_id: "uuid..." });
|
|
170
|
+
await agent.methods.firstTouchSubscriptionsUpdate(agent, { subscription_id: "uuid...", updates: { is_active: false } });
|
|
171
|
+
await agent.methods.firstTouchSubscriptionsDelete(agent, { subscription_id: "uuid..." });
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
ULTRA only for subscriptions — up to 10 active per user.
|
|
175
|
+
|
|
176
|
+
> **Don't poll — push.** Median lead time before the second KOL is 12 seconds. WebSocket channel: `kol:first_touches` (PRO+).
|
|
177
|
+
|
|
102
178
|
### Rate-limit headers
|
|
103
179
|
|
|
104
180
|
Every successful request populates a module-level `lastRateLimit` (limit / remaining / reset / requestId):
|
|
@@ -113,17 +189,18 @@ console.log(lastRateLimit); // { limit: "10000", remaining: "9999", reset: "..."
|
|
|
113
189
|
|
|
114
190
|
| Tier | Price | Wallets tracked | Requests/day |
|
|
115
191
|
|------|-------|-----------------|--------------|
|
|
116
|
-
|
|
|
117
|
-
|
|
|
118
|
-
|
|
|
192
|
+
| Free | $0 | 10 | 200 |
|
|
193
|
+
| Pro | $49/mo | 50 | 10,000 |
|
|
194
|
+
| Ultra | $149/mo | 100 + WS events | 100,000 |
|
|
119
195
|
|
|
120
|
-
Get a key at [madeonsol.com/developer](https://madeonsol.com/developer).
|
|
196
|
+
Free tier returns the full REST response shape on every endpoint — real wallets, TX signatures, full precision. Paid tiers unlock webhooks, WebSockets, rule engines, and ULTRA-only data depth. Get a key at [madeonsol.com/developer](https://madeonsol.com/developer).
|
|
121
197
|
|
|
122
198
|
## Also Available
|
|
123
199
|
|
|
124
200
|
| Platform | Package |
|
|
125
201
|
|---|---|
|
|
126
202
|
| TypeScript SDK | [`madeonsol`](https://www.npmjs.com/package/madeonsol) on npm |
|
|
203
|
+
| Rust SDK | [`madeonsol`](https://crates.io/crates/madeonsol) on crates.io |
|
|
127
204
|
| Python (LangChain, CrewAI) | [`madeonsol-x402`](https://pypi.org/project/madeonsol-x402/) on PyPI |
|
|
128
205
|
| MCP Server (Claude, Cursor) | [`mcp-server-madeonsol`](https://www.npmjs.com/package/mcp-server-madeonsol) |
|
|
129
206
|
| ElizaOS | [`@madeonsol/plugin-madeonsol`](https://www.npmjs.com/package/@madeonsol/plugin-madeonsol) |
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const deployerAlertsAction: {
|
|
3
|
+
name: string;
|
|
4
|
+
similes: string[];
|
|
5
|
+
description: string;
|
|
6
|
+
examples: {
|
|
7
|
+
input: {
|
|
8
|
+
limit: number;
|
|
9
|
+
};
|
|
10
|
+
output: {
|
|
11
|
+
status: string;
|
|
12
|
+
};
|
|
13
|
+
explanation: string;
|
|
14
|
+
}[][];
|
|
15
|
+
schema: z.ZodObject<{
|
|
16
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
17
|
+
offset: z.ZodDefault<z.ZodNumber>;
|
|
18
|
+
since: z.ZodOptional<z.ZodString>;
|
|
19
|
+
tier: z.ZodOptional<z.ZodEnum<["elite", "good", "moderate", "rising", "cold"]>>;
|
|
20
|
+
}, "strip", z.ZodTypeAny, {
|
|
21
|
+
limit: number;
|
|
22
|
+
offset: number;
|
|
23
|
+
since?: string | undefined;
|
|
24
|
+
tier?: "elite" | "good" | "moderate" | "rising" | "cold" | undefined;
|
|
25
|
+
}, {
|
|
26
|
+
limit?: number | undefined;
|
|
27
|
+
since?: string | undefined;
|
|
28
|
+
offset?: number | undefined;
|
|
29
|
+
tier?: "elite" | "good" | "moderate" | "rising" | "cold" | undefined;
|
|
30
|
+
}>;
|
|
31
|
+
handler: (agent: unknown, input: {
|
|
32
|
+
limit?: number;
|
|
33
|
+
offset?: number;
|
|
34
|
+
since?: string;
|
|
35
|
+
tier?: "elite" | "good" | "moderate" | "rising" | "cold";
|
|
36
|
+
}) => Promise<{
|
|
37
|
+
status: string;
|
|
38
|
+
result: any;
|
|
39
|
+
message?: undefined;
|
|
40
|
+
} | {
|
|
41
|
+
status: string;
|
|
42
|
+
message: string;
|
|
43
|
+
result?: undefined;
|
|
44
|
+
}>;
|
|
45
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { deployerAlerts } from "../tools/index.js";
|
|
3
|
+
export const deployerAlertsAction = {
|
|
4
|
+
name: "MADEONSOL_DEPLOYER_ALERTS_ACTION",
|
|
5
|
+
similes: ["deployer alerts", "pump fun launches", "new token alerts", "elite deployer tokens"],
|
|
6
|
+
description: "Get real-time alerts from elite Pump.fun deployers with KOL buy enrichment. Costs $0.01 USDC per request.",
|
|
7
|
+
examples: [
|
|
8
|
+
[{ input: { limit: 10 }, output: { status: "success" }, explanation: "Get the 10 most recent deployer alerts" }],
|
|
9
|
+
],
|
|
10
|
+
schema: z.object({
|
|
11
|
+
limit: z.number().min(1).max(100).default(10).describe("Number of alerts"),
|
|
12
|
+
offset: z.number().min(0).default(0).describe("Pagination offset"),
|
|
13
|
+
since: z.string().optional().describe("ISO8601 timestamp to filter alerts after"),
|
|
14
|
+
tier: z
|
|
15
|
+
.enum(["elite", "good", "moderate", "rising", "cold"])
|
|
16
|
+
.optional()
|
|
17
|
+
.describe("Filter by deployer tier. PRO/ULTRA subscribers only — BASIC callers receive 403."),
|
|
18
|
+
}),
|
|
19
|
+
handler: async (agent, input) => {
|
|
20
|
+
try {
|
|
21
|
+
const data = await deployerAlerts(agent, input);
|
|
22
|
+
return { status: "success", result: data };
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
return { status: "error", message: err.message };
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const kolAlertsRecentAction: {
|
|
3
|
+
name: string;
|
|
4
|
+
similes: string[];
|
|
5
|
+
description: string;
|
|
6
|
+
examples: {
|
|
7
|
+
input: {
|
|
8
|
+
window: string;
|
|
9
|
+
limit: number;
|
|
10
|
+
};
|
|
11
|
+
output: {
|
|
12
|
+
status: string;
|
|
13
|
+
};
|
|
14
|
+
explanation: string;
|
|
15
|
+
}[][];
|
|
16
|
+
schema: z.ZodObject<{
|
|
17
|
+
window: z.ZodDefault<z.ZodEnum<["5m", "15m", "1h", "6h", "24h"]>>;
|
|
18
|
+
types: z.ZodOptional<z.ZodArray<z.ZodEnum<["consensus_cluster", "fresh_token_kol_buy", "heating_up"]>, "many">>;
|
|
19
|
+
min_severity: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
|
|
20
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
21
|
+
}, "strip", z.ZodTypeAny, {
|
|
22
|
+
limit: number;
|
|
23
|
+
window: "24h" | "1h" | "6h" | "5m" | "15m";
|
|
24
|
+
types?: ("consensus_cluster" | "fresh_token_kol_buy" | "heating_up")[] | undefined;
|
|
25
|
+
min_severity?: "high" | "medium" | "low" | undefined;
|
|
26
|
+
}, {
|
|
27
|
+
limit?: number | undefined;
|
|
28
|
+
types?: ("consensus_cluster" | "fresh_token_kol_buy" | "heating_up")[] | undefined;
|
|
29
|
+
window?: "24h" | "1h" | "6h" | "5m" | "15m" | undefined;
|
|
30
|
+
min_severity?: "high" | "medium" | "low" | undefined;
|
|
31
|
+
}>;
|
|
32
|
+
handler: (agent: unknown, input: {
|
|
33
|
+
window?: string;
|
|
34
|
+
types?: string[];
|
|
35
|
+
min_severity?: string;
|
|
36
|
+
limit?: number;
|
|
37
|
+
}) => Promise<{
|
|
38
|
+
status: string;
|
|
39
|
+
result: any;
|
|
40
|
+
message?: undefined;
|
|
41
|
+
} | {
|
|
42
|
+
status: string;
|
|
43
|
+
message: string;
|
|
44
|
+
result?: undefined;
|
|
45
|
+
}>;
|
|
46
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { kolAlertsRecent } from "../tools/index.js";
|
|
3
|
+
export const kolAlertsRecentAction = {
|
|
4
|
+
name: "MADEONSOL_KOL_ALERTS_RECENT_ACTION",
|
|
5
|
+
similes: ["kol alerts", "recent kol alerts", "kol signals", "live kol feed", "kol events"],
|
|
6
|
+
description: "Live KOL alert feed from MadeOnSol — consensus clusters, fresh-token KOL buys, and heating-up wallets unified into one stream. Sorted by detected_at DESC then severity.",
|
|
7
|
+
examples: [
|
|
8
|
+
[
|
|
9
|
+
{ input: { window: "15m", limit: 20 }, output: { status: "success" }, explanation: "Show recent KOL alerts in the last 15 minutes" },
|
|
10
|
+
],
|
|
11
|
+
],
|
|
12
|
+
schema: z.object({
|
|
13
|
+
window: z.enum(["5m", "15m", "1h", "6h", "24h"]).default("15m").describe("Lookback window"),
|
|
14
|
+
types: z.array(z.enum(["consensus_cluster", "fresh_token_kol_buy", "heating_up"])).optional().describe("Filter to specific alert types"),
|
|
15
|
+
min_severity: z.enum(["low", "medium", "high"]).optional().describe("Minimum severity to include"),
|
|
16
|
+
limit: z.number().min(1).max(200).default(50).describe("Max alerts"),
|
|
17
|
+
}),
|
|
18
|
+
handler: async (agent, input) => {
|
|
19
|
+
try {
|
|
20
|
+
const data = await kolAlertsRecent(agent, input);
|
|
21
|
+
return { status: "success", result: data };
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
return { status: "error", message: err.message };
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const kolCompareAction: {
|
|
3
|
+
name: string;
|
|
4
|
+
similes: string[];
|
|
5
|
+
description: string;
|
|
6
|
+
examples: {
|
|
7
|
+
input: {
|
|
8
|
+
wallets: string[];
|
|
9
|
+
};
|
|
10
|
+
output: {
|
|
11
|
+
status: string;
|
|
12
|
+
};
|
|
13
|
+
explanation: string;
|
|
14
|
+
}[][];
|
|
15
|
+
schema: z.ZodObject<{
|
|
16
|
+
wallets: z.ZodArray<z.ZodString, "many">;
|
|
17
|
+
}, "strip", z.ZodTypeAny, {
|
|
18
|
+
wallets: string[];
|
|
19
|
+
}, {
|
|
20
|
+
wallets: string[];
|
|
21
|
+
}>;
|
|
22
|
+
handler: (agent: unknown, input: {
|
|
23
|
+
wallets: string[];
|
|
24
|
+
}) => Promise<{
|
|
25
|
+
status: string;
|
|
26
|
+
result: any;
|
|
27
|
+
message?: undefined;
|
|
28
|
+
} | {
|
|
29
|
+
status: string;
|
|
30
|
+
message: string;
|
|
31
|
+
result?: undefined;
|
|
32
|
+
}>;
|
|
33
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { kolCompare } from "../tools/index.js";
|
|
3
|
+
export const kolCompareAction = {
|
|
4
|
+
name: "MADEONSOL_KOL_COMPARE_ACTION",
|
|
5
|
+
similes: ["compare kols", "compare wallets", "kol comparison", "side by side kols"],
|
|
6
|
+
description: "Side-by-side comparison of 2-5 Solana KOL wallets on MadeOnSol — strategy, winrates, ROI, PnL percentiles. PRO+ adds overlap tokens (bought by 2+ in last 30d). BASIC=2, PRO=4, ULTRA=5.",
|
|
7
|
+
examples: [
|
|
8
|
+
[
|
|
9
|
+
{ input: { wallets: ["WalletA", "WalletB"] }, output: { status: "success" }, explanation: "Compare two KOL wallets side-by-side" },
|
|
10
|
+
],
|
|
11
|
+
],
|
|
12
|
+
schema: z.object({
|
|
13
|
+
wallets: z.array(z.string()).min(2).max(5).describe("2-5 wallet addresses"),
|
|
14
|
+
}),
|
|
15
|
+
handler: async (agent, input) => {
|
|
16
|
+
try {
|
|
17
|
+
const data = await kolCompare(agent, input);
|
|
18
|
+
return { status: "success", result: data };
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
return { status: "error", message: err.message };
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const kolCoordinationAction: {
|
|
3
|
+
name: string;
|
|
4
|
+
similes: string[];
|
|
5
|
+
description: string;
|
|
6
|
+
examples: {
|
|
7
|
+
input: {
|
|
8
|
+
period: string;
|
|
9
|
+
min_kols: number;
|
|
10
|
+
};
|
|
11
|
+
output: {
|
|
12
|
+
status: string;
|
|
13
|
+
};
|
|
14
|
+
explanation: string;
|
|
15
|
+
}[][];
|
|
16
|
+
schema: z.ZodObject<{
|
|
17
|
+
period: z.ZodDefault<z.ZodEnum<["1h", "6h", "24h", "7d"]>>;
|
|
18
|
+
min_kols: z.ZodDefault<z.ZodNumber>;
|
|
19
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
20
|
+
}, "strip", z.ZodTypeAny, {
|
|
21
|
+
period: "24h" | "1h" | "6h" | "7d";
|
|
22
|
+
min_kols: number;
|
|
23
|
+
limit: number;
|
|
24
|
+
}, {
|
|
25
|
+
period?: "24h" | "1h" | "6h" | "7d" | undefined;
|
|
26
|
+
min_kols?: number | undefined;
|
|
27
|
+
limit?: number | undefined;
|
|
28
|
+
}>;
|
|
29
|
+
handler: (agent: unknown, input: {
|
|
30
|
+
period?: string;
|
|
31
|
+
min_kols?: number;
|
|
32
|
+
limit?: number;
|
|
33
|
+
}) => Promise<{
|
|
34
|
+
status: string;
|
|
35
|
+
result: any;
|
|
36
|
+
message?: undefined;
|
|
37
|
+
} | {
|
|
38
|
+
status: string;
|
|
39
|
+
message: string;
|
|
40
|
+
result?: undefined;
|
|
41
|
+
}>;
|
|
42
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { kolCoordination } from "../tools/index.js";
|
|
3
|
+
export const kolCoordinationAction = {
|
|
4
|
+
name: "MADEONSOL_KOL_COORDINATION_ACTION",
|
|
5
|
+
similes: ["kol convergence", "what tokens are kols accumulating", "kol coordination", "smart money convergence"],
|
|
6
|
+
description: "Get KOL convergence signals — tokens being accumulated by multiple KOLs simultaneously. Costs $0.02 USDC per request.",
|
|
7
|
+
examples: [
|
|
8
|
+
[{ input: { period: "24h", min_kols: 3 }, output: { status: "success" }, explanation: "Get tokens where 3+ KOLs are converging in the last 24 hours" }],
|
|
9
|
+
],
|
|
10
|
+
schema: z.object({
|
|
11
|
+
period: z.enum(["1h", "6h", "24h", "7d"]).default("24h").describe("Time period"),
|
|
12
|
+
min_kols: z.number().min(2).max(50).default(3).describe("Minimum KOLs converging"),
|
|
13
|
+
limit: z.number().min(1).max(50).default(20).describe("Number of results"),
|
|
14
|
+
}),
|
|
15
|
+
handler: async (agent, input) => {
|
|
16
|
+
try {
|
|
17
|
+
const data = await kolCoordination(agent, input);
|
|
18
|
+
return { status: "success", result: data };
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
return { status: "error", message: err.message };
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const kolFeedAction: {
|
|
3
|
+
name: string;
|
|
4
|
+
similes: string[];
|
|
5
|
+
description: string;
|
|
6
|
+
examples: {
|
|
7
|
+
input: {
|
|
8
|
+
limit: number;
|
|
9
|
+
action: string;
|
|
10
|
+
};
|
|
11
|
+
output: {
|
|
12
|
+
status: string;
|
|
13
|
+
};
|
|
14
|
+
explanation: string;
|
|
15
|
+
}[][];
|
|
16
|
+
schema: z.ZodObject<{
|
|
17
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
18
|
+
action: z.ZodOptional<z.ZodEnum<["buy", "sell"]>>;
|
|
19
|
+
kol: z.ZodOptional<z.ZodString>;
|
|
20
|
+
}, "strip", z.ZodTypeAny, {
|
|
21
|
+
limit: number;
|
|
22
|
+
action?: "buy" | "sell" | undefined;
|
|
23
|
+
kol?: string | undefined;
|
|
24
|
+
}, {
|
|
25
|
+
limit?: number | undefined;
|
|
26
|
+
action?: "buy" | "sell" | undefined;
|
|
27
|
+
kol?: string | undefined;
|
|
28
|
+
}>;
|
|
29
|
+
handler: (agent: unknown, input: {
|
|
30
|
+
limit?: number;
|
|
31
|
+
action?: string;
|
|
32
|
+
kol?: string;
|
|
33
|
+
}) => Promise<{
|
|
34
|
+
status: string;
|
|
35
|
+
result: any;
|
|
36
|
+
message?: undefined;
|
|
37
|
+
} | {
|
|
38
|
+
status: string;
|
|
39
|
+
message: string;
|
|
40
|
+
result?: undefined;
|
|
41
|
+
}>;
|
|
42
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { kolFeed } from "../tools/index.js";
|
|
3
|
+
export const kolFeedAction = {
|
|
4
|
+
name: "MADEONSOL_KOL_FEED_ACTION",
|
|
5
|
+
similes: ["kol trades", "what are kols buying", "kol feed", "smart money trades", "kol activity"],
|
|
6
|
+
description: "Get real-time Solana KOL trades from 1,000+ tracked wallets via MadeOnSol x402 API. Costs $0.005 USDC per request.",
|
|
7
|
+
examples: [
|
|
8
|
+
[{ input: { limit: 10, action: "buy" }, output: { status: "success" }, explanation: "Fetch the 10 most recent KOL buy trades" }],
|
|
9
|
+
],
|
|
10
|
+
schema: z.object({
|
|
11
|
+
limit: z.number().min(1).max(100).default(10).describe("Number of trades"),
|
|
12
|
+
action: z.enum(["buy", "sell"]).optional().describe("Filter by trade type"),
|
|
13
|
+
kol: z.string().optional().describe("Filter by KOL wallet address"),
|
|
14
|
+
}),
|
|
15
|
+
handler: async (agent, input) => {
|
|
16
|
+
try {
|
|
17
|
+
const data = await kolFeed(agent, input);
|
|
18
|
+
return { status: "success", result: data };
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
return { status: "error", message: err.message };
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const kolFirstTouchesAction: {
|
|
3
|
+
name: string;
|
|
4
|
+
similes: string[];
|
|
5
|
+
description: string;
|
|
6
|
+
examples: {
|
|
7
|
+
input: {
|
|
8
|
+
preset: string;
|
|
9
|
+
limit: number;
|
|
10
|
+
};
|
|
11
|
+
output: {
|
|
12
|
+
status: string;
|
|
13
|
+
};
|
|
14
|
+
explanation: string;
|
|
15
|
+
}[][];
|
|
16
|
+
schema: z.ZodObject<{
|
|
17
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
18
|
+
since: z.ZodOptional<z.ZodString>;
|
|
19
|
+
before: z.ZodOptional<z.ZodString>;
|
|
20
|
+
kol: z.ZodOptional<z.ZodString>;
|
|
21
|
+
min_kol_winrate_7d: z.ZodOptional<z.ZodNumber>;
|
|
22
|
+
min_scout_tier: z.ZodOptional<z.ZodEnum<["S", "A", "B", "C"]>>;
|
|
23
|
+
min_n_touches: z.ZodOptional<z.ZodNumber>;
|
|
24
|
+
strategy: z.ZodOptional<z.ZodEnum<["scalper", "day_trader", "swing_trader", "hodler", "mixed"]>>;
|
|
25
|
+
token_age_max_min: z.ZodOptional<z.ZodNumber>;
|
|
26
|
+
min_first_buy_sol: z.ZodOptional<z.ZodNumber>;
|
|
27
|
+
mint_suffix: z.ZodOptional<z.ZodString>;
|
|
28
|
+
preset: z.ZodOptional<z.ZodEnum<["scout", "fresh_launch"]>>;
|
|
29
|
+
include: z.ZodOptional<z.ZodString>;
|
|
30
|
+
}, "strip", z.ZodTypeAny, {
|
|
31
|
+
limit: number;
|
|
32
|
+
before?: string | undefined;
|
|
33
|
+
since?: string | undefined;
|
|
34
|
+
kol?: string | undefined;
|
|
35
|
+
min_kol_winrate_7d?: number | undefined;
|
|
36
|
+
min_scout_tier?: "S" | "A" | "B" | "C" | undefined;
|
|
37
|
+
min_n_touches?: number | undefined;
|
|
38
|
+
strategy?: "scalper" | "day_trader" | "swing_trader" | "hodler" | "mixed" | undefined;
|
|
39
|
+
token_age_max_min?: number | undefined;
|
|
40
|
+
min_first_buy_sol?: number | undefined;
|
|
41
|
+
mint_suffix?: string | undefined;
|
|
42
|
+
preset?: "scout" | "fresh_launch" | undefined;
|
|
43
|
+
include?: string | undefined;
|
|
44
|
+
}, {
|
|
45
|
+
limit?: number | undefined;
|
|
46
|
+
before?: string | undefined;
|
|
47
|
+
since?: string | undefined;
|
|
48
|
+
kol?: string | undefined;
|
|
49
|
+
min_kol_winrate_7d?: number | undefined;
|
|
50
|
+
min_scout_tier?: "S" | "A" | "B" | "C" | undefined;
|
|
51
|
+
min_n_touches?: number | undefined;
|
|
52
|
+
strategy?: "scalper" | "day_trader" | "swing_trader" | "hodler" | "mixed" | undefined;
|
|
53
|
+
token_age_max_min?: number | undefined;
|
|
54
|
+
min_first_buy_sol?: number | undefined;
|
|
55
|
+
mint_suffix?: string | undefined;
|
|
56
|
+
preset?: "scout" | "fresh_launch" | undefined;
|
|
57
|
+
include?: string | undefined;
|
|
58
|
+
}>;
|
|
59
|
+
handler: (agent: unknown, input: {
|
|
60
|
+
limit?: number;
|
|
61
|
+
since?: string;
|
|
62
|
+
before?: string;
|
|
63
|
+
kol?: string;
|
|
64
|
+
min_kol_winrate_7d?: number;
|
|
65
|
+
min_scout_tier?: "S" | "A" | "B" | "C";
|
|
66
|
+
min_n_touches?: number;
|
|
67
|
+
strategy?: "scalper" | "day_trader" | "swing_trader" | "hodler" | "mixed";
|
|
68
|
+
token_age_max_min?: number;
|
|
69
|
+
min_first_buy_sol?: number;
|
|
70
|
+
mint_suffix?: string;
|
|
71
|
+
preset?: "scout" | "fresh_launch";
|
|
72
|
+
include?: string;
|
|
73
|
+
}) => Promise<{
|
|
74
|
+
status: string;
|
|
75
|
+
result: any;
|
|
76
|
+
message?: undefined;
|
|
77
|
+
} | {
|
|
78
|
+
status: string;
|
|
79
|
+
message: string;
|
|
80
|
+
result?: undefined;
|
|
81
|
+
}>;
|
|
82
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { kolFirstTouches } from "../tools/index.js";
|
|
3
|
+
export const kolFirstTouchesAction = {
|
|
4
|
+
name: "MADEONSOL_KOL_FIRST_TOUCHES_ACTION",
|
|
5
|
+
similes: [
|
|
6
|
+
"kol first touch",
|
|
7
|
+
"first kol buyer",
|
|
8
|
+
"scout signal",
|
|
9
|
+
"smart money first buyer",
|
|
10
|
+
"kol scout alert",
|
|
11
|
+
"first buy by kol",
|
|
12
|
+
],
|
|
13
|
+
description: "Get the most recent first-KOL-touch events on Solana tokens — the moment a tracked KOL was the first to buy a given mint. Filterable by scout tier (S/A/B/C from mv_kol_scout_score), KOL winrate, token age, mint suffix. Backtest: top scouts attract >=3 follow-on KOLs within 4h ~50% of the time vs ~14% baseline.",
|
|
14
|
+
examples: [
|
|
15
|
+
[
|
|
16
|
+
{
|
|
17
|
+
input: { preset: "scout", limit: 10 },
|
|
18
|
+
output: { status: "success" },
|
|
19
|
+
explanation: "Fetch 10 recent first-touch events from B-tier-or-better scouts on tokens younger than 60 minutes",
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
],
|
|
23
|
+
schema: z.object({
|
|
24
|
+
limit: z.number().min(1).max(100).default(20).describe("Number of events (1-100)"),
|
|
25
|
+
since: z.string().optional().describe("ISO timestamp — events strictly newer than this"),
|
|
26
|
+
before: z.string().optional().describe("ISO timestamp — events strictly older than this (pagination cursor)"),
|
|
27
|
+
kol: z.string().optional().describe("Single KOL wallet address (base58)"),
|
|
28
|
+
min_kol_winrate_7d: z.number().min(0).max(100).optional(),
|
|
29
|
+
min_scout_tier: z.enum(["S", "A", "B", "C"]).optional().describe("Scout tier S/A/B/C (S = highest)"),
|
|
30
|
+
min_n_touches: z.number().min(1).optional(),
|
|
31
|
+
strategy: z.enum(["scalper", "day_trader", "swing_trader", "hodler", "mixed"]).optional(),
|
|
32
|
+
token_age_max_min: z.number().min(1).optional().describe("Only events on tokens younger than N minutes"),
|
|
33
|
+
min_first_buy_sol: z.number().min(0).optional(),
|
|
34
|
+
mint_suffix: z.string().optional().describe("Suffix-filter the token mint (e.g. 'pump')"),
|
|
35
|
+
preset: z.enum(["scout", "fresh_launch"]).optional(),
|
|
36
|
+
include: z.string().optional().describe("Comma-separated includes — currently 'followers_4h'"),
|
|
37
|
+
}),
|
|
38
|
+
handler: async (agent, input) => {
|
|
39
|
+
try {
|
|
40
|
+
const data = await kolFirstTouches(agent, input);
|
|
41
|
+
return { status: "success", result: data };
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
return { status: "error", message: err.message };
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const kolLeaderboardAction: {
|
|
3
|
+
name: string;
|
|
4
|
+
similes: string[];
|
|
5
|
+
description: string;
|
|
6
|
+
examples: {
|
|
7
|
+
input: {
|
|
8
|
+
period: string;
|
|
9
|
+
limit: number;
|
|
10
|
+
};
|
|
11
|
+
output: {
|
|
12
|
+
status: string;
|
|
13
|
+
};
|
|
14
|
+
explanation: string;
|
|
15
|
+
}[][];
|
|
16
|
+
schema: z.ZodObject<{
|
|
17
|
+
period: z.ZodDefault<z.ZodEnum<["today", "7d", "30d"]>>;
|
|
18
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
19
|
+
}, "strip", z.ZodTypeAny, {
|
|
20
|
+
period: "7d" | "today" | "30d";
|
|
21
|
+
limit: number;
|
|
22
|
+
}, {
|
|
23
|
+
period?: "7d" | "today" | "30d" | undefined;
|
|
24
|
+
limit?: number | undefined;
|
|
25
|
+
}>;
|
|
26
|
+
handler: (agent: unknown, input: {
|
|
27
|
+
period?: string;
|
|
28
|
+
limit?: number;
|
|
29
|
+
}) => Promise<{
|
|
30
|
+
status: string;
|
|
31
|
+
result: any;
|
|
32
|
+
message?: undefined;
|
|
33
|
+
} | {
|
|
34
|
+
status: string;
|
|
35
|
+
message: string;
|
|
36
|
+
result?: undefined;
|
|
37
|
+
}>;
|
|
38
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { kolLeaderboard } from "../tools/index.js";
|
|
3
|
+
export const kolLeaderboardAction = {
|
|
4
|
+
name: "MADEONSOL_KOL_LEADERBOARD_ACTION",
|
|
5
|
+
similes: ["kol leaderboard", "top kols", "best performing kols", "kol rankings", "kol pnl"],
|
|
6
|
+
description: "Get KOL performance rankings by PnL and win rate. Costs $0.005 USDC per request.",
|
|
7
|
+
examples: [
|
|
8
|
+
[{ input: { period: "7d", limit: 10 }, output: { status: "success" }, explanation: "Get the top 10 KOLs by PnL this week" }],
|
|
9
|
+
],
|
|
10
|
+
schema: z.object({
|
|
11
|
+
period: z.enum(["today", "7d", "30d"]).default("7d").describe("Time period"),
|
|
12
|
+
limit: z.number().min(1).max(50).default(20).describe("Number of KOLs"),
|
|
13
|
+
}),
|
|
14
|
+
handler: async (agent, input) => {
|
|
15
|
+
try {
|
|
16
|
+
const data = await kolLeaderboard(agent, input);
|
|
17
|
+
return { status: "success", result: data };
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
return { status: "error", message: err.message };
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
};
|