@clawnch/clawncher-mcp 0.1.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 +86 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +786 -0
- package/dist/index.js.map +1 -0
- package/package.json +46 -0
package/README.md
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# @clawnch/clawncher-mcp
|
|
2
|
+
|
|
3
|
+
MCP (Model Context Protocol) server for [Clawncher](https://clawn.ch/er) — deploy tokens, trade, manage liquidity, and claim fees on Base via AI agents.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @clawnch/clawncher-mcp
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Configuration
|
|
12
|
+
|
|
13
|
+
Set environment variables before running:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Required for write operations (deploy, swap, claim)
|
|
17
|
+
export CLAWNCHER_PRIVATE_KEY=0x...
|
|
18
|
+
|
|
19
|
+
# Optional
|
|
20
|
+
export CLAWNCHER_NETWORK=mainnet # or "sepolia" (default: mainnet)
|
|
21
|
+
export CLAWNCHER_RPC_URL=https://... # custom RPC (default: public Base RPC)
|
|
22
|
+
export CLAWNCHER_API_URL=https://clawn.ch # API base URL
|
|
23
|
+
export CLAWNCHER_API_KEY=... # for verified agent deploys
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Usage with Claude Desktop
|
|
27
|
+
|
|
28
|
+
Add to `claude_desktop_config.json`:
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"mcpServers": {
|
|
33
|
+
"clawncher": {
|
|
34
|
+
"command": "clawncher-mcp",
|
|
35
|
+
"env": {
|
|
36
|
+
"CLAWNCHER_PRIVATE_KEY": "0x...",
|
|
37
|
+
"CLAWNCHER_NETWORK": "mainnet"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Or with npx (no global install):
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"mcpServers": {
|
|
49
|
+
"clawncher": {
|
|
50
|
+
"command": "npx",
|
|
51
|
+
"args": ["-y", "@clawnch/clawncher-mcp"],
|
|
52
|
+
"env": {
|
|
53
|
+
"CLAWNCHER_PRIVATE_KEY": "0x...",
|
|
54
|
+
"CLAWNCHER_NETWORK": "mainnet"
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Available Tools
|
|
62
|
+
|
|
63
|
+
| Tool | Description | Requires Key |
|
|
64
|
+
|------|-------------|:---:|
|
|
65
|
+
| `clawncher_deploy` | Deploy a new ERC-20 token with Uniswap V4 pool | Yes |
|
|
66
|
+
| `clawncher_deploy_verified` | Deploy as a verified @clawnch agent (costs 100 CLAWNCH) | Yes + API Key |
|
|
67
|
+
| `clawncher_token_info` | Get on-chain token details (vault, MEV, rewards, etc.) | No |
|
|
68
|
+
| `clawncher_swap` | Execute token swaps via 0x aggregation | Yes |
|
|
69
|
+
| `clawncher_fees_check` | Check claimable LP trading fees for a wallet | No |
|
|
70
|
+
| `clawncher_fees_claim` | Claim accumulated LP trading fees | Yes |
|
|
71
|
+
| `clawncher_stats` | Get Clawnch market statistics | No |
|
|
72
|
+
| `clawncher_tokens` | List tokens launched via Clawnch | No |
|
|
73
|
+
| `clawncher_portfolio` | Portfolio summary with claimable fees | No |
|
|
74
|
+
| `clawncher_addresses` | Contract addresses for a network | No |
|
|
75
|
+
| `clawncher_agent_register` | Register as a verified Clawnch agent | Yes |
|
|
76
|
+
| `clawncher_agent_status` | Check verified agent status | Yes + API Key |
|
|
77
|
+
| `clawncher_wallet_balance` | ETH and token balances | No |
|
|
78
|
+
| `clawncher_skill` | Retrieve Clawncher SDK quick-start docs | No |
|
|
79
|
+
|
|
80
|
+
## Links
|
|
81
|
+
|
|
82
|
+
- [Clawncher](https://clawn.ch/er) — Product page
|
|
83
|
+
- [SDK Docs](https://clawn.ch/er/docs) — Full technical documentation
|
|
84
|
+
- [Skill Doc](https://clawn.ch/er/skill.md) — Agent quick-start (raw markdown)
|
|
85
|
+
- [npm: @clawnch/clawncher-sdk](https://www.npmjs.com/package/@clawnch/clawncher-sdk) — SDK
|
|
86
|
+
- [npm: clawncher](https://www.npmjs.com/package/clawncher) — CLI
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Clawncher MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Model Context Protocol server exposing Clawncher SDK capabilities as tools
|
|
6
|
+
* for AI agents. Supports token deployment, trading, liquidity management,
|
|
7
|
+
* fee claiming, and market data on Base.
|
|
8
|
+
*
|
|
9
|
+
* Environment variables:
|
|
10
|
+
* CLAWNCHER_PRIVATE_KEY - Wallet private key (required for write operations)
|
|
11
|
+
* CLAWNCHER_NETWORK - "mainnet" or "sepolia" (default: "mainnet")
|
|
12
|
+
* CLAWNCHER_RPC_URL - Custom RPC URL (optional)
|
|
13
|
+
* CLAWNCHER_API_URL - API base URL (default: "https://clawn.ch")
|
|
14
|
+
* CLAWNCHER_API_KEY - API key for verified agent deploys (optional)
|
|
15
|
+
*/
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;GAaG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,786 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Clawncher MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Model Context Protocol server exposing Clawncher SDK capabilities as tools
|
|
6
|
+
* for AI agents. Supports token deployment, trading, liquidity management,
|
|
7
|
+
* fee claiming, and market data on Base.
|
|
8
|
+
*
|
|
9
|
+
* Environment variables:
|
|
10
|
+
* CLAWNCHER_PRIVATE_KEY - Wallet private key (required for write operations)
|
|
11
|
+
* CLAWNCHER_NETWORK - "mainnet" or "sepolia" (default: "mainnet")
|
|
12
|
+
* CLAWNCHER_RPC_URL - Custom RPC URL (optional)
|
|
13
|
+
* CLAWNCHER_API_URL - API base URL (default: "https://clawn.ch")
|
|
14
|
+
* CLAWNCHER_API_KEY - API key for verified agent deploys (optional)
|
|
15
|
+
*/
|
|
16
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
17
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
18
|
+
import { z } from 'zod';
|
|
19
|
+
import { createWalletClient, createPublicClient, http, formatEther, parseUnits, } from 'viem';
|
|
20
|
+
import { privateKeyToAccount } from 'viem/accounts';
|
|
21
|
+
import { base, baseSepolia } from 'viem/chains';
|
|
22
|
+
import { ClawnchDeployer, ClawnchReader, ClawnchClient, ClawncherClaimer, ClawnchPortfolio, ClawnchSwapper, ClawnchApiDeployer, getAddresses, NATIVE_TOKEN_ADDRESS, } from '@clawnch/clawncher-sdk';
|
|
23
|
+
// ============================================================================
|
|
24
|
+
// Configuration
|
|
25
|
+
// ============================================================================
|
|
26
|
+
const VERSION = '0.1.0';
|
|
27
|
+
function getConfig() {
|
|
28
|
+
const network = (process.env.CLAWNCHER_NETWORK || 'mainnet');
|
|
29
|
+
if (network !== 'mainnet' && network !== 'sepolia') {
|
|
30
|
+
throw new Error('CLAWNCHER_NETWORK must be "mainnet" or "sepolia"');
|
|
31
|
+
}
|
|
32
|
+
const chain = network === 'mainnet' ? base : baseSepolia;
|
|
33
|
+
const rpcUrl = process.env.CLAWNCHER_RPC_URL ||
|
|
34
|
+
(network === 'mainnet' ? 'https://mainnet.base.org' : 'https://sepolia.base.org');
|
|
35
|
+
const apiUrl = process.env.CLAWNCHER_API_URL || 'https://clawn.ch';
|
|
36
|
+
const apiKey = process.env.CLAWNCHER_API_KEY;
|
|
37
|
+
const privateKey = process.env.CLAWNCHER_PRIVATE_KEY;
|
|
38
|
+
return { network, chain, rpcUrl, apiUrl, apiKey, privateKey };
|
|
39
|
+
}
|
|
40
|
+
// ============================================================================
|
|
41
|
+
// Lazy-initialized clients
|
|
42
|
+
// ============================================================================
|
|
43
|
+
let _publicClient = null;
|
|
44
|
+
let _walletClient = null;
|
|
45
|
+
let _apiClient = null;
|
|
46
|
+
function getPublicClient() {
|
|
47
|
+
if (!_publicClient) {
|
|
48
|
+
const { chain, rpcUrl } = getConfig();
|
|
49
|
+
_publicClient = createPublicClient({ chain, transport: http(rpcUrl) });
|
|
50
|
+
}
|
|
51
|
+
return _publicClient;
|
|
52
|
+
}
|
|
53
|
+
function getWalletClient() {
|
|
54
|
+
if (!_walletClient) {
|
|
55
|
+
const { chain, rpcUrl, privateKey } = getConfig();
|
|
56
|
+
if (!privateKey) {
|
|
57
|
+
throw new Error('CLAWNCHER_PRIVATE_KEY is required for write operations');
|
|
58
|
+
}
|
|
59
|
+
const key = privateKey.startsWith('0x') ? privateKey : `0x${privateKey}`;
|
|
60
|
+
const account = privateKeyToAccount(key);
|
|
61
|
+
_walletClient = createWalletClient({
|
|
62
|
+
account,
|
|
63
|
+
chain,
|
|
64
|
+
transport: http(rpcUrl),
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return _walletClient;
|
|
68
|
+
}
|
|
69
|
+
function getApiClient() {
|
|
70
|
+
if (!_apiClient) {
|
|
71
|
+
const { apiUrl } = getConfig();
|
|
72
|
+
_apiClient = new ClawnchClient({ baseUrl: apiUrl });
|
|
73
|
+
}
|
|
74
|
+
return _apiClient;
|
|
75
|
+
}
|
|
76
|
+
function getWalletAddress() {
|
|
77
|
+
const wallet = getWalletClient();
|
|
78
|
+
return wallet.account.address;
|
|
79
|
+
}
|
|
80
|
+
// Helpers
|
|
81
|
+
function isValidAddress(addr) {
|
|
82
|
+
return /^0x[0-9a-fA-F]{40}$/.test(addr);
|
|
83
|
+
}
|
|
84
|
+
function requireAddress(addr, label) {
|
|
85
|
+
if (!isValidAddress(addr)) {
|
|
86
|
+
throw new Error(`Invalid ${label} address: ${addr}`);
|
|
87
|
+
}
|
|
88
|
+
return addr;
|
|
89
|
+
}
|
|
90
|
+
// ============================================================================
|
|
91
|
+
// MCP Server
|
|
92
|
+
// ============================================================================
|
|
93
|
+
const server = new McpServer({
|
|
94
|
+
name: 'clawncher',
|
|
95
|
+
version: VERSION,
|
|
96
|
+
});
|
|
97
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
98
|
+
// Tool: clawncher_deploy
|
|
99
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
100
|
+
server.tool('clawncher_deploy', 'Deploy a new ERC-20 token on Base with a Uniswap V4 liquidity pool. Returns the transaction hash and token address. Requires CLAWNCHER_PRIVATE_KEY.', {
|
|
101
|
+
name: z.string().min(1).max(32).describe('Token name (e.g. "My Token")'),
|
|
102
|
+
symbol: z.string().min(1).max(10).describe('Token ticker symbol (e.g. "MYTKN")'),
|
|
103
|
+
image: z.string().url().optional().describe('Token image URL'),
|
|
104
|
+
description: z.string().optional().describe('Token description'),
|
|
105
|
+
recipient: z.string().optional().describe('Fee recipient address (defaults to deployer wallet)'),
|
|
106
|
+
fee_preference: z.enum(['Clawnch', 'Paired', 'Both']).default('Clawnch').describe('Fee type: Clawnch (token), Paired (WETH), or Both'),
|
|
107
|
+
vault_percent: z.number().min(1).max(90).optional().describe('Vault allocation percentage (1-90)'),
|
|
108
|
+
vault_lockup_days: z.number().min(7).default(7).optional().describe('Vault lockup duration in days (min 7)'),
|
|
109
|
+
vault_recipient: z.string().optional().describe('Vault recipient address (defaults to deployer)'),
|
|
110
|
+
vanity: z.boolean().default(true).describe('Enable vanity address (0xccc... prefix)'),
|
|
111
|
+
dry_run: z.boolean().default(false).describe('Validate only, do not deploy'),
|
|
112
|
+
network: z.enum(['mainnet', 'sepolia']).optional().describe('Override network (defaults to CLAWNCHER_NETWORK env)'),
|
|
113
|
+
}, async (params) => {
|
|
114
|
+
try {
|
|
115
|
+
const config = getConfig();
|
|
116
|
+
const network = params.network || config.network;
|
|
117
|
+
const wallet = getWalletClient();
|
|
118
|
+
const publicClient = getPublicClient();
|
|
119
|
+
const walletAddress = wallet.account.address;
|
|
120
|
+
const recipient = params.recipient
|
|
121
|
+
? requireAddress(params.recipient, 'recipient')
|
|
122
|
+
: walletAddress;
|
|
123
|
+
const vaultRecipient = params.vault_recipient
|
|
124
|
+
? requireAddress(params.vault_recipient, 'vault recipient')
|
|
125
|
+
: walletAddress;
|
|
126
|
+
const deployer = new ClawnchDeployer({
|
|
127
|
+
wallet: wallet,
|
|
128
|
+
publicClient: publicClient,
|
|
129
|
+
network,
|
|
130
|
+
});
|
|
131
|
+
const deployOptions = {
|
|
132
|
+
name: params.name,
|
|
133
|
+
symbol: params.symbol,
|
|
134
|
+
tokenAdmin: walletAddress,
|
|
135
|
+
image: params.image,
|
|
136
|
+
metadata: params.description ? { description: params.description } : undefined,
|
|
137
|
+
rewards: {
|
|
138
|
+
recipients: [{
|
|
139
|
+
recipient,
|
|
140
|
+
admin: walletAddress,
|
|
141
|
+
bps: 10000,
|
|
142
|
+
feePreference: params.fee_preference,
|
|
143
|
+
}],
|
|
144
|
+
},
|
|
145
|
+
vanity: params.vanity,
|
|
146
|
+
dryRun: params.dry_run,
|
|
147
|
+
};
|
|
148
|
+
if (params.vault_percent) {
|
|
149
|
+
deployOptions.vault = {
|
|
150
|
+
percentage: params.vault_percent,
|
|
151
|
+
lockupDuration: (params.vault_lockup_days || 7) * 86400,
|
|
152
|
+
recipient: vaultRecipient,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
const result = await deployer.deploy(deployOptions);
|
|
156
|
+
if (params.dry_run) {
|
|
157
|
+
const dryResult = result;
|
|
158
|
+
return {
|
|
159
|
+
content: [{
|
|
160
|
+
type: 'text',
|
|
161
|
+
text: JSON.stringify({
|
|
162
|
+
valid: dryResult.valid,
|
|
163
|
+
estimatedGas: dryResult.estimatedGas?.toString(),
|
|
164
|
+
estimatedCostEth: dryResult.estimatedCostEth,
|
|
165
|
+
translatedConfig: dryResult.translatedConfig,
|
|
166
|
+
}, null, 2),
|
|
167
|
+
}],
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
if (result.error) {
|
|
171
|
+
return {
|
|
172
|
+
content: [{ type: 'text', text: `Deploy failed: ${result.error.message}` }],
|
|
173
|
+
isError: true,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
const receipt = await result.waitForTransaction();
|
|
177
|
+
return {
|
|
178
|
+
content: [{
|
|
179
|
+
type: 'text',
|
|
180
|
+
text: JSON.stringify({
|
|
181
|
+
success: true,
|
|
182
|
+
txHash: result.txHash,
|
|
183
|
+
tokenAddress: receipt.address,
|
|
184
|
+
deployer: walletAddress,
|
|
185
|
+
network,
|
|
186
|
+
name: params.name,
|
|
187
|
+
symbol: params.symbol,
|
|
188
|
+
vanity: params.vanity,
|
|
189
|
+
}, null, 2),
|
|
190
|
+
}],
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
return {
|
|
195
|
+
content: [{ type: 'text', text: `Deploy error: ${err.message}` }],
|
|
196
|
+
isError: true,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
201
|
+
// Tool: clawncher_deploy_verified
|
|
202
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
203
|
+
server.tool('clawncher_deploy_verified', 'Deploy a token via the Clawnch API as a verified agent. Gets @clawnch badge. Requires CLAWNCHER_API_KEY and CLAWNCHER_PRIVATE_KEY. Costs 100 CLAWNCH tokens.', {
|
|
204
|
+
name: z.string().min(1).max(32).describe('Token name'),
|
|
205
|
+
symbol: z.string().min(1).max(10).describe('Token ticker symbol'),
|
|
206
|
+
image: z.string().url().optional().describe('Token image URL'),
|
|
207
|
+
description: z.string().optional().describe('Token description'),
|
|
208
|
+
vanity: z.boolean().default(true).describe('Enable vanity address (0xccc...)'),
|
|
209
|
+
}, async (params) => {
|
|
210
|
+
try {
|
|
211
|
+
const config = getConfig();
|
|
212
|
+
if (!config.apiKey) {
|
|
213
|
+
return {
|
|
214
|
+
content: [{ type: 'text', text: 'CLAWNCHER_API_KEY is required for verified deploys. Register first with clawncher_agent_register.' }],
|
|
215
|
+
isError: true,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
const wallet = getWalletClient();
|
|
219
|
+
const publicClient = getPublicClient();
|
|
220
|
+
const apiDeployer = new ClawnchApiDeployer({
|
|
221
|
+
apiKey: config.apiKey,
|
|
222
|
+
wallet: wallet,
|
|
223
|
+
publicClient: publicClient,
|
|
224
|
+
network: config.network,
|
|
225
|
+
apiBaseUrl: config.apiUrl,
|
|
226
|
+
});
|
|
227
|
+
const result = await apiDeployer.deploy({
|
|
228
|
+
name: params.name,
|
|
229
|
+
symbol: params.symbol,
|
|
230
|
+
image: params.image,
|
|
231
|
+
description: params.description,
|
|
232
|
+
vanity: params.vanity,
|
|
233
|
+
});
|
|
234
|
+
return {
|
|
235
|
+
content: [{
|
|
236
|
+
type: 'text',
|
|
237
|
+
text: JSON.stringify({
|
|
238
|
+
success: result.success,
|
|
239
|
+
txHash: result.txHash,
|
|
240
|
+
tokenAddress: result.tokenAddress,
|
|
241
|
+
clawnchBurned: result.clawnchBurned,
|
|
242
|
+
deployedFrom: result.deployedFrom,
|
|
243
|
+
agentId: result.agentId,
|
|
244
|
+
}, null, 2),
|
|
245
|
+
}],
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
catch (err) {
|
|
249
|
+
return {
|
|
250
|
+
content: [{ type: 'text', text: `Verified deploy error: ${err.message}` }],
|
|
251
|
+
isError: true,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
256
|
+
// Tool: clawncher_token_info
|
|
257
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
258
|
+
server.tool('clawncher_token_info', 'Get comprehensive on-chain details for a Clawncher token: name, symbol, supply, deployment info, vault status, MEV config, reward recipients, and claimable fees.', {
|
|
259
|
+
address: z.string().describe('Token contract address (0x...)'),
|
|
260
|
+
network: z.enum(['mainnet', 'sepolia']).optional().describe('Override network'),
|
|
261
|
+
}, async (params) => {
|
|
262
|
+
try {
|
|
263
|
+
const config = getConfig();
|
|
264
|
+
const network = params.network || config.network;
|
|
265
|
+
const publicClient = getPublicClient();
|
|
266
|
+
const tokenAddress = requireAddress(params.address, 'token');
|
|
267
|
+
const reader = new ClawnchReader({
|
|
268
|
+
publicClient: publicClient,
|
|
269
|
+
network,
|
|
270
|
+
});
|
|
271
|
+
const details = await reader.getTokenDetails(tokenAddress);
|
|
272
|
+
if (!details) {
|
|
273
|
+
return {
|
|
274
|
+
content: [{ type: 'text', text: `Token not found or not a Clawncher token: ${tokenAddress}` }],
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
const formatted = {
|
|
278
|
+
address: details.address,
|
|
279
|
+
name: details.name,
|
|
280
|
+
symbol: details.symbol,
|
|
281
|
+
decimals: details.decimals,
|
|
282
|
+
totalSupply: formatEther(details.totalSupply),
|
|
283
|
+
tokenAdmin: details.tokenAdmin,
|
|
284
|
+
network,
|
|
285
|
+
};
|
|
286
|
+
if (details.deployment) {
|
|
287
|
+
formatted.deployment = {
|
|
288
|
+
hook: details.deployment.hook,
|
|
289
|
+
locker: details.deployment.locker,
|
|
290
|
+
extensions: details.deployment.extensions,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
if (details.rewards) {
|
|
294
|
+
formatted.rewards = {
|
|
295
|
+
rewardBps: details.rewards.rewardBps,
|
|
296
|
+
rewardRecipients: details.rewards.rewardRecipients,
|
|
297
|
+
rewardAdmins: details.rewards.rewardAdmins,
|
|
298
|
+
numPositions: details.rewards.numPositions.toString(),
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
if (details.vault) {
|
|
302
|
+
formatted.vault = {
|
|
303
|
+
amountTotal: formatEther(details.vault.amountTotal),
|
|
304
|
+
amountClaimed: formatEther(details.vault.amountClaimed),
|
|
305
|
+
amountAvailable: formatEther(details.vault.amountAvailable),
|
|
306
|
+
isUnlocked: details.vault.isUnlocked,
|
|
307
|
+
isFullyVested: details.vault.isFullyVested,
|
|
308
|
+
percentVested: details.vault.percentVested,
|
|
309
|
+
lockupEndTime: details.vault.lockupEndTime.toString(),
|
|
310
|
+
vestingEndTime: details.vault.vestingEndTime.toString(),
|
|
311
|
+
admin: details.vault.admin,
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
if (details.mev) {
|
|
315
|
+
formatted.mev = {
|
|
316
|
+
startingFee: details.mev.startingFee,
|
|
317
|
+
endingFee: details.mev.endingFee,
|
|
318
|
+
currentFee: details.mev.currentFee,
|
|
319
|
+
isDecayComplete: details.mev.isDecayComplete,
|
|
320
|
+
secondsToDecay: details.mev.secondsToDecay.toString(),
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
return {
|
|
324
|
+
content: [{ type: 'text', text: JSON.stringify(formatted, null, 2) }],
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
catch (err) {
|
|
328
|
+
return {
|
|
329
|
+
content: [{ type: 'text', text: `Token info error: ${err.message}` }],
|
|
330
|
+
isError: true,
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
335
|
+
// Tool: clawncher_swap
|
|
336
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
337
|
+
server.tool('clawncher_swap', 'Execute a token swap on Base via 0x aggregation. Supports any ERC-20 pair. Use "ETH" or the native token address for ETH. Requires CLAWNCHER_PRIVATE_KEY.', {
|
|
338
|
+
sell_token: z.string().describe('Token to sell (address, or "ETH")'),
|
|
339
|
+
buy_token: z.string().describe('Token to buy (address, or "ETH")'),
|
|
340
|
+
amount: z.string().describe('Amount to sell in human-readable units (e.g. "0.01", "100")'),
|
|
341
|
+
slippage_bps: z.number().default(100).describe('Slippage tolerance in basis points (100 = 1%)'),
|
|
342
|
+
price_only: z.boolean().default(false).describe('If true, return price quote without executing'),
|
|
343
|
+
}, async (params) => {
|
|
344
|
+
try {
|
|
345
|
+
const config = getConfig();
|
|
346
|
+
const wallet = getWalletClient();
|
|
347
|
+
const publicClient = getPublicClient();
|
|
348
|
+
const swapper = new ClawnchSwapper({
|
|
349
|
+
wallet: wallet,
|
|
350
|
+
publicClient: publicClient,
|
|
351
|
+
network: config.network,
|
|
352
|
+
apiBaseUrl: config.apiUrl,
|
|
353
|
+
});
|
|
354
|
+
const sellToken = params.sell_token.toLowerCase() === 'eth'
|
|
355
|
+
? NATIVE_TOKEN_ADDRESS
|
|
356
|
+
: requireAddress(params.sell_token, 'sell token');
|
|
357
|
+
const buyToken = params.buy_token.toLowerCase() === 'eth'
|
|
358
|
+
? NATIVE_TOKEN_ADDRESS
|
|
359
|
+
: requireAddress(params.buy_token, 'buy token');
|
|
360
|
+
const sellDecimals = await swapper.getDecimals(sellToken);
|
|
361
|
+
const sellAmount = parseUnits(params.amount, sellDecimals);
|
|
362
|
+
if (params.price_only) {
|
|
363
|
+
const price = await swapper.getPrice({
|
|
364
|
+
sellToken,
|
|
365
|
+
buyToken,
|
|
366
|
+
sellAmount,
|
|
367
|
+
slippageBps: params.slippage_bps,
|
|
368
|
+
});
|
|
369
|
+
const buyDecimals = await swapper.getDecimals(buyToken);
|
|
370
|
+
const buySymbol = buyToken === NATIVE_TOKEN_ADDRESS ? 'ETH' : await swapper.getSymbol(buyToken);
|
|
371
|
+
const sellSymbol = sellToken === NATIVE_TOKEN_ADDRESS ? 'ETH' : await swapper.getSymbol(sellToken);
|
|
372
|
+
return {
|
|
373
|
+
content: [{
|
|
374
|
+
type: 'text',
|
|
375
|
+
text: JSON.stringify({
|
|
376
|
+
sellToken: sellSymbol,
|
|
377
|
+
buyToken: buySymbol,
|
|
378
|
+
sellAmount: params.amount,
|
|
379
|
+
buyAmount: formatUnitsCustom(price.buyAmount, buyDecimals),
|
|
380
|
+
minBuyAmount: formatUnitsCustom(price.minBuyAmount, buyDecimals),
|
|
381
|
+
gasEstimate: price.gas.toString(),
|
|
382
|
+
liquidityAvailable: price.liquidityAvailable,
|
|
383
|
+
}, null, 2),
|
|
384
|
+
}],
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
const result = await swapper.swap({
|
|
388
|
+
sellToken,
|
|
389
|
+
buyToken,
|
|
390
|
+
sellAmount,
|
|
391
|
+
slippageBps: params.slippage_bps,
|
|
392
|
+
});
|
|
393
|
+
const buyDecimals = await swapper.getDecimals(buyToken);
|
|
394
|
+
const buySymbol = buyToken === NATIVE_TOKEN_ADDRESS ? 'ETH' : await swapper.getSymbol(buyToken);
|
|
395
|
+
return {
|
|
396
|
+
content: [{
|
|
397
|
+
type: 'text',
|
|
398
|
+
text: JSON.stringify({
|
|
399
|
+
success: true,
|
|
400
|
+
txHash: result.txHash,
|
|
401
|
+
buyAmount: formatUnitsCustom(result.buyAmount, buyDecimals),
|
|
402
|
+
buyToken: buySymbol,
|
|
403
|
+
sellAmount: params.amount,
|
|
404
|
+
gasUsed: result.gasUsed.toString(),
|
|
405
|
+
}, null, 2),
|
|
406
|
+
}],
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
catch (err) {
|
|
410
|
+
return {
|
|
411
|
+
content: [{ type: 'text', text: `Swap error: ${err.message}` }],
|
|
412
|
+
isError: true,
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
});
|
|
416
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
417
|
+
// Tool: clawncher_fees_check
|
|
418
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
419
|
+
server.tool('clawncher_fees_check', 'Check claimable LP trading fees for a wallet address. Returns available WETH and token fees.', {
|
|
420
|
+
wallet: z.string().optional().describe('Wallet address to check (defaults to configured wallet)'),
|
|
421
|
+
tokens: z.string().optional().describe('Comma-separated token addresses to check (optional, uses API to discover)'),
|
|
422
|
+
}, async (params) => {
|
|
423
|
+
try {
|
|
424
|
+
const walletAddr = params.wallet
|
|
425
|
+
? requireAddress(params.wallet, 'wallet')
|
|
426
|
+
: getWalletAddress();
|
|
427
|
+
const client = getApiClient();
|
|
428
|
+
const fees = await client.getAvailableFees(walletAddr, params.tokens);
|
|
429
|
+
return {
|
|
430
|
+
content: [{
|
|
431
|
+
type: 'text',
|
|
432
|
+
text: JSON.stringify({
|
|
433
|
+
wallet: fees.wallet,
|
|
434
|
+
weth: fees.weth,
|
|
435
|
+
tokens: fees.tokens,
|
|
436
|
+
tokensChecked: fees.tokensChecked,
|
|
437
|
+
}, null, 2),
|
|
438
|
+
}],
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
catch (err) {
|
|
442
|
+
return {
|
|
443
|
+
content: [{ type: 'text', text: `Fees check error: ${err.message}` }],
|
|
444
|
+
isError: true,
|
|
445
|
+
};
|
|
446
|
+
}
|
|
447
|
+
});
|
|
448
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
449
|
+
// Tool: clawncher_fees_claim
|
|
450
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
451
|
+
server.tool('clawncher_fees_claim', 'Claim accumulated LP trading fees for a specific token. Collects rewards and claims both WETH and token fees. Requires CLAWNCHER_PRIVATE_KEY.', {
|
|
452
|
+
token: z.string().describe('Token contract address to claim fees for'),
|
|
453
|
+
}, async (params) => {
|
|
454
|
+
try {
|
|
455
|
+
const config = getConfig();
|
|
456
|
+
const wallet = getWalletClient();
|
|
457
|
+
const publicClient = getPublicClient();
|
|
458
|
+
const tokenAddress = requireAddress(params.token, 'token');
|
|
459
|
+
const claimer = new ClawncherClaimer({
|
|
460
|
+
wallet: wallet,
|
|
461
|
+
publicClient: publicClient,
|
|
462
|
+
network: config.network,
|
|
463
|
+
});
|
|
464
|
+
const result = await claimer.claimAll(tokenAddress, wallet.account.address);
|
|
465
|
+
return {
|
|
466
|
+
content: [{
|
|
467
|
+
type: 'text',
|
|
468
|
+
text: JSON.stringify({
|
|
469
|
+
success: true,
|
|
470
|
+
collectRewards: { txHash: result.collectRewards.txHash },
|
|
471
|
+
claimFeesWeth: result.claimFeesWeth ? { txHash: result.claimFeesWeth.txHash } : null,
|
|
472
|
+
claimFeesToken: result.claimFeesToken ? { txHash: result.claimFeesToken.txHash } : null,
|
|
473
|
+
}, null, 2),
|
|
474
|
+
}],
|
|
475
|
+
};
|
|
476
|
+
}
|
|
477
|
+
catch (err) {
|
|
478
|
+
return {
|
|
479
|
+
content: [{ type: 'text', text: `Fees claim error: ${err.message}` }],
|
|
480
|
+
isError: true,
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
});
|
|
484
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
485
|
+
// Tool: clawncher_stats
|
|
486
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
487
|
+
server.tool('clawncher_stats', 'Get Clawnch market statistics: total tokens launched, volume, $CLAWNCH price and market cap.', {}, async () => {
|
|
488
|
+
try {
|
|
489
|
+
const client = getApiClient();
|
|
490
|
+
const stats = await client.getStats();
|
|
491
|
+
return {
|
|
492
|
+
content: [{
|
|
493
|
+
type: 'text',
|
|
494
|
+
text: JSON.stringify(stats, null, 2),
|
|
495
|
+
}],
|
|
496
|
+
};
|
|
497
|
+
}
|
|
498
|
+
catch (err) {
|
|
499
|
+
return {
|
|
500
|
+
content: [{ type: 'text', text: `Stats error: ${err.message}` }],
|
|
501
|
+
isError: true,
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
});
|
|
505
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
506
|
+
// Tool: clawncher_tokens
|
|
507
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
508
|
+
server.tool('clawncher_tokens', 'List tokens launched via Clawnch. Can filter by agent name, source, or address.', {
|
|
509
|
+
limit: z.number().default(20).describe('Max tokens to return (default 20)'),
|
|
510
|
+
offset: z.number().default(0).describe('Offset for pagination'),
|
|
511
|
+
agent: z.string().optional().describe('Filter by agent name'),
|
|
512
|
+
source: z.string().optional().describe('Filter by source platform'),
|
|
513
|
+
address: z.string().optional().describe('Filter by contract address'),
|
|
514
|
+
}, async (params) => {
|
|
515
|
+
try {
|
|
516
|
+
const client = getApiClient();
|
|
517
|
+
const response = await client.getLaunches({
|
|
518
|
+
limit: params.limit,
|
|
519
|
+
offset: params.offset,
|
|
520
|
+
agent: params.agent,
|
|
521
|
+
source: params.source,
|
|
522
|
+
address: params.address,
|
|
523
|
+
});
|
|
524
|
+
return {
|
|
525
|
+
content: [{
|
|
526
|
+
type: 'text',
|
|
527
|
+
text: JSON.stringify(response, null, 2),
|
|
528
|
+
}],
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
catch (err) {
|
|
532
|
+
return {
|
|
533
|
+
content: [{ type: 'text', text: `Tokens list error: ${err.message}` }],
|
|
534
|
+
isError: true,
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
});
|
|
538
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
539
|
+
// Tool: clawncher_portfolio
|
|
540
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
541
|
+
server.tool('clawncher_portfolio', 'Get portfolio summary for a wallet: all Clawncher tokens with claimable fees. Uses on-chain data.', {
|
|
542
|
+
wallet: z.string().optional().describe('Wallet address (defaults to configured wallet)'),
|
|
543
|
+
network: z.enum(['mainnet', 'sepolia']).optional().describe('Override network'),
|
|
544
|
+
}, async (params) => {
|
|
545
|
+
try {
|
|
546
|
+
const config = getConfig();
|
|
547
|
+
const network = params.network || config.network;
|
|
548
|
+
const publicClient = getPublicClient();
|
|
549
|
+
const walletAddr = params.wallet
|
|
550
|
+
? requireAddress(params.wallet, 'wallet')
|
|
551
|
+
: getWalletAddress();
|
|
552
|
+
const portfolio = new ClawnchPortfolio({
|
|
553
|
+
publicClient: publicClient,
|
|
554
|
+
network,
|
|
555
|
+
});
|
|
556
|
+
// Discover tokens first
|
|
557
|
+
const tokens = await portfolio.discoverTokens(walletAddr);
|
|
558
|
+
if (tokens.length === 0) {
|
|
559
|
+
return {
|
|
560
|
+
content: [{ type: 'text', text: JSON.stringify({ wallet: walletAddr, tokens: [], message: 'No Clawncher tokens found for this wallet' }, null, 2) }],
|
|
561
|
+
};
|
|
562
|
+
}
|
|
563
|
+
const holdings = await portfolio.getTokensForWallet(walletAddr, tokens);
|
|
564
|
+
const totals = await portfolio.getTotalClaimable(walletAddr, tokens);
|
|
565
|
+
return {
|
|
566
|
+
content: [{
|
|
567
|
+
type: 'text',
|
|
568
|
+
text: JSON.stringify({
|
|
569
|
+
wallet: walletAddr,
|
|
570
|
+
network,
|
|
571
|
+
tokensFound: tokens.length,
|
|
572
|
+
holdings: holdings.map(h => ({
|
|
573
|
+
address: h.address,
|
|
574
|
+
name: h.name,
|
|
575
|
+
symbol: h.symbol,
|
|
576
|
+
rewardBps: h.bps,
|
|
577
|
+
claimableWeth: h.formattedWeth,
|
|
578
|
+
claimableToken: h.formattedToken,
|
|
579
|
+
})),
|
|
580
|
+
totals: {
|
|
581
|
+
weth: totals.formattedWeth,
|
|
582
|
+
tokens: totals.tokens.map(t => ({
|
|
583
|
+
address: t.address,
|
|
584
|
+
symbol: t.symbol,
|
|
585
|
+
amount: t.formatted,
|
|
586
|
+
})),
|
|
587
|
+
},
|
|
588
|
+
}, null, 2),
|
|
589
|
+
}],
|
|
590
|
+
};
|
|
591
|
+
}
|
|
592
|
+
catch (err) {
|
|
593
|
+
return {
|
|
594
|
+
content: [{ type: 'text', text: `Portfolio error: ${err.message}` }],
|
|
595
|
+
isError: true,
|
|
596
|
+
};
|
|
597
|
+
}
|
|
598
|
+
});
|
|
599
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
600
|
+
// Tool: clawncher_addresses
|
|
601
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
602
|
+
server.tool('clawncher_addresses', 'Get all Clawncher and Uniswap contract addresses for a network.', {
|
|
603
|
+
network: z.enum(['mainnet', 'sepolia']).optional().describe('Network (defaults to configured)'),
|
|
604
|
+
}, async (params) => {
|
|
605
|
+
try {
|
|
606
|
+
const config = getConfig();
|
|
607
|
+
const network = params.network || config.network;
|
|
608
|
+
const addresses = getAddresses(network);
|
|
609
|
+
return {
|
|
610
|
+
content: [{
|
|
611
|
+
type: 'text',
|
|
612
|
+
text: JSON.stringify({ network, ...addresses }, null, 2),
|
|
613
|
+
}],
|
|
614
|
+
};
|
|
615
|
+
}
|
|
616
|
+
catch (err) {
|
|
617
|
+
return {
|
|
618
|
+
content: [{ type: 'text', text: `Addresses error: ${err.message}` }],
|
|
619
|
+
isError: true,
|
|
620
|
+
};
|
|
621
|
+
}
|
|
622
|
+
});
|
|
623
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
624
|
+
// Tool: clawncher_agent_register
|
|
625
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
626
|
+
server.tool('clawncher_agent_register', 'Register as a verified Clawnch agent. Returns an API key for verified deploys. Requires CLAWNCHER_PRIVATE_KEY and signing a message.', {
|
|
627
|
+
name: z.string().min(1).describe('Agent name'),
|
|
628
|
+
description: z.string().describe('Agent description'),
|
|
629
|
+
}, async (params) => {
|
|
630
|
+
try {
|
|
631
|
+
const config = getConfig();
|
|
632
|
+
const wallet = getWalletClient();
|
|
633
|
+
const publicClient = getPublicClient();
|
|
634
|
+
const result = await ClawnchApiDeployer.register({
|
|
635
|
+
wallet: wallet,
|
|
636
|
+
publicClient: publicClient,
|
|
637
|
+
apiBaseUrl: config.apiUrl,
|
|
638
|
+
}, {
|
|
639
|
+
name: params.name,
|
|
640
|
+
wallet: wallet.account.address,
|
|
641
|
+
description: params.description,
|
|
642
|
+
});
|
|
643
|
+
return {
|
|
644
|
+
content: [{
|
|
645
|
+
type: 'text',
|
|
646
|
+
text: JSON.stringify({
|
|
647
|
+
success: true,
|
|
648
|
+
apiKey: result.apiKey,
|
|
649
|
+
agentId: result.agentId,
|
|
650
|
+
wallet: result.wallet,
|
|
651
|
+
note: 'Save the apiKey as CLAWNCHER_API_KEY for verified deploys. You need 100 CLAWNCH tokens approved to deploy.',
|
|
652
|
+
}, null, 2),
|
|
653
|
+
}],
|
|
654
|
+
};
|
|
655
|
+
}
|
|
656
|
+
catch (err) {
|
|
657
|
+
return {
|
|
658
|
+
content: [{ type: 'text', text: `Registration error: ${err.message}` }],
|
|
659
|
+
isError: true,
|
|
660
|
+
};
|
|
661
|
+
}
|
|
662
|
+
});
|
|
663
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
664
|
+
// Tool: clawncher_agent_status
|
|
665
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
666
|
+
server.tool('clawncher_agent_status', 'Check the status of the configured verified agent: registration, CLAWNCH balance, allowance, and launch count.', {}, async () => {
|
|
667
|
+
try {
|
|
668
|
+
const config = getConfig();
|
|
669
|
+
if (!config.apiKey) {
|
|
670
|
+
return {
|
|
671
|
+
content: [{ type: 'text', text: 'CLAWNCHER_API_KEY not set. Register first with clawncher_agent_register.' }],
|
|
672
|
+
isError: true,
|
|
673
|
+
};
|
|
674
|
+
}
|
|
675
|
+
const wallet = getWalletClient();
|
|
676
|
+
const publicClient = getPublicClient();
|
|
677
|
+
const apiDeployer = new ClawnchApiDeployer({
|
|
678
|
+
apiKey: config.apiKey,
|
|
679
|
+
wallet: wallet,
|
|
680
|
+
publicClient: publicClient,
|
|
681
|
+
network: config.network,
|
|
682
|
+
apiBaseUrl: config.apiUrl,
|
|
683
|
+
});
|
|
684
|
+
const status = await apiDeployer.getStatus();
|
|
685
|
+
return {
|
|
686
|
+
content: [{
|
|
687
|
+
type: 'text',
|
|
688
|
+
text: JSON.stringify(status, null, 2),
|
|
689
|
+
}],
|
|
690
|
+
};
|
|
691
|
+
}
|
|
692
|
+
catch (err) {
|
|
693
|
+
return {
|
|
694
|
+
content: [{ type: 'text', text: `Agent status error: ${err.message}` }],
|
|
695
|
+
isError: true,
|
|
696
|
+
};
|
|
697
|
+
}
|
|
698
|
+
});
|
|
699
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
700
|
+
// Tool: clawncher_wallet_balance
|
|
701
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
702
|
+
server.tool('clawncher_wallet_balance', 'Get ETH and ERC-20 token balances for the configured wallet or any address.', {
|
|
703
|
+
wallet: z.string().optional().describe('Wallet address (defaults to configured wallet)'),
|
|
704
|
+
token: z.string().optional().describe('ERC-20 token address to check balance (omit for ETH only)'),
|
|
705
|
+
}, async (params) => {
|
|
706
|
+
try {
|
|
707
|
+
const publicClient = getPublicClient();
|
|
708
|
+
const walletAddr = params.wallet
|
|
709
|
+
? requireAddress(params.wallet, 'wallet')
|
|
710
|
+
: getWalletAddress();
|
|
711
|
+
const ethBalance = await publicClient.getBalance({ address: walletAddr });
|
|
712
|
+
const result = {
|
|
713
|
+
wallet: walletAddr,
|
|
714
|
+
ethBalance: formatEther(ethBalance),
|
|
715
|
+
};
|
|
716
|
+
if (params.token) {
|
|
717
|
+
const tokenAddr = requireAddress(params.token, 'token');
|
|
718
|
+
const config = getConfig();
|
|
719
|
+
const swapper = new ClawnchSwapper({
|
|
720
|
+
wallet: getWalletClient(),
|
|
721
|
+
publicClient: publicClient,
|
|
722
|
+
network: config.network,
|
|
723
|
+
apiBaseUrl: config.apiUrl,
|
|
724
|
+
});
|
|
725
|
+
const balance = await swapper.getBalance(tokenAddr, walletAddr);
|
|
726
|
+
const decimals = await swapper.getDecimals(tokenAddr);
|
|
727
|
+
const symbol = await swapper.getSymbol(tokenAddr);
|
|
728
|
+
result.tokenBalance = {
|
|
729
|
+
address: tokenAddr,
|
|
730
|
+
symbol,
|
|
731
|
+
balance: formatUnitsCustom(balance, decimals),
|
|
732
|
+
raw: balance.toString(),
|
|
733
|
+
};
|
|
734
|
+
}
|
|
735
|
+
return {
|
|
736
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
737
|
+
};
|
|
738
|
+
}
|
|
739
|
+
catch (err) {
|
|
740
|
+
return {
|
|
741
|
+
content: [{ type: 'text', text: `Balance error: ${err.message}` }],
|
|
742
|
+
isError: true,
|
|
743
|
+
};
|
|
744
|
+
}
|
|
745
|
+
});
|
|
746
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
747
|
+
// Tool: clawncher_skill
|
|
748
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
749
|
+
server.tool('clawncher_skill', 'Retrieve the Clawncher SDK quick-start documentation (skill doc). Returns the full markdown guide for using Clawncher.', {}, async () => {
|
|
750
|
+
try {
|
|
751
|
+
const client = getApiClient();
|
|
752
|
+
const skill = await client.getSkill();
|
|
753
|
+
return {
|
|
754
|
+
content: [{ type: 'text', text: skill }],
|
|
755
|
+
};
|
|
756
|
+
}
|
|
757
|
+
catch (err) {
|
|
758
|
+
return {
|
|
759
|
+
content: [{ type: 'text', text: `Skill fetch error: ${err.message}` }],
|
|
760
|
+
isError: true,
|
|
761
|
+
};
|
|
762
|
+
}
|
|
763
|
+
});
|
|
764
|
+
// ============================================================================
|
|
765
|
+
// Helpers
|
|
766
|
+
// ============================================================================
|
|
767
|
+
function formatUnitsCustom(value, decimals) {
|
|
768
|
+
const str = value.toString().padStart(decimals + 1, '0');
|
|
769
|
+
const intPart = str.slice(0, str.length - decimals) || '0';
|
|
770
|
+
const fracPart = str.slice(str.length - decimals);
|
|
771
|
+
// Trim trailing zeros from fractional part
|
|
772
|
+
const trimmed = fracPart.replace(/0+$/, '');
|
|
773
|
+
return trimmed ? `${intPart}.${trimmed}` : intPart;
|
|
774
|
+
}
|
|
775
|
+
// ============================================================================
|
|
776
|
+
// Start
|
|
777
|
+
// ============================================================================
|
|
778
|
+
async function main() {
|
|
779
|
+
const transport = new StdioServerTransport();
|
|
780
|
+
await server.connect(transport);
|
|
781
|
+
}
|
|
782
|
+
main().catch((err) => {
|
|
783
|
+
console.error('MCP server failed to start:', err);
|
|
784
|
+
process.exit(1);
|
|
785
|
+
});
|
|
786
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@clawnch/clawncher-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP server for Clawncher - deploy tokens, trade, manage liquidity on Base via AI agents",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"clawncher-mcp": "./dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "dist/index.js",
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"README.md"
|
|
13
|
+
],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"dev": "tsc --watch",
|
|
17
|
+
"clean": "rm -rf dist",
|
|
18
|
+
"prepublishOnly": "npm run build"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"clawncher",
|
|
22
|
+
"clawnch",
|
|
23
|
+
"mcp",
|
|
24
|
+
"model-context-protocol",
|
|
25
|
+
"base",
|
|
26
|
+
"ai-agent",
|
|
27
|
+
"token-launch",
|
|
28
|
+
"uniswap",
|
|
29
|
+
"crypto"
|
|
30
|
+
],
|
|
31
|
+
"author": "Clawncher",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"homepage": "https://clawn.ch/er",
|
|
34
|
+
"engines": {
|
|
35
|
+
"node": ">=18"
|
|
36
|
+
},
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"@clawnch/clawncher-sdk": "^0.1.0",
|
|
39
|
+
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
40
|
+
"viem": "^2.21.0"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@types/node": "^22.10.0",
|
|
44
|
+
"typescript": "^5.7.2"
|
|
45
|
+
}
|
|
46
|
+
}
|