crossmint-wallets-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/LICENSE +21 -0
- package/README.md +303 -0
- package/dist/core/client.d.ts +24 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +51 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/create-wallet.d.ts +17 -0
- package/dist/core/create-wallet.d.ts.map +1 -0
- package/dist/core/create-wallet.js +44 -0
- package/dist/core/create-wallet.js.map +1 -0
- package/dist/core/get-balance.d.ts +16 -0
- package/dist/core/get-balance.d.ts.map +1 -0
- package/dist/core/get-balance.js +31 -0
- package/dist/core/get-balance.js.map +1 -0
- package/dist/core/pay-x402-endpoint.d.ts +36 -0
- package/dist/core/pay-x402-endpoint.d.ts.map +1 -0
- package/dist/core/pay-x402-endpoint.js +189 -0
- package/dist/core/pay-x402-endpoint.js.map +1 -0
- package/dist/core/transfer-token.d.ts +20 -0
- package/dist/core/transfer-token.d.ts.map +1 -0
- package/dist/core/transfer-token.js +33 -0
- package/dist/core/transfer-token.js.map +1 -0
- package/dist/core/types.d.ts +46 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +6 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/errors.d.ts +23 -0
- package/dist/mcp/errors.d.ts.map +1 -0
- package/dist/mcp/errors.js +34 -0
- package/dist/mcp/errors.js.map +1 -0
- package/dist/mcp/server.d.ts +16 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +34 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +3 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +198 -0
- package/dist/mcp/tools.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { createWallet } from "../core/create-wallet.js";
|
|
3
|
+
import { getBalance } from "../core/get-balance.js";
|
|
4
|
+
import { transferToken } from "../core/transfer-token.js";
|
|
5
|
+
import { payX402Endpoint } from "../core/pay-x402-endpoint.js";
|
|
6
|
+
import { classifyError, toolErrorResponse } from "./errors.js";
|
|
7
|
+
/**
|
|
8
|
+
* Register the 4 Crossmint wallet tools against an MCP server instance.
|
|
9
|
+
*
|
|
10
|
+
* Tool naming convention: `crossmint_<verb>` — the `crossmint_` prefix
|
|
11
|
+
* disambiguates from other MCP servers a client may have connected.
|
|
12
|
+
*
|
|
13
|
+
* All handlers catch thrown errors and translate them into the
|
|
14
|
+
* standardized MCP error response shape from `./errors.ts`, so clients
|
|
15
|
+
* never see raw stack traces in the content block.
|
|
16
|
+
*/
|
|
17
|
+
const chainSchema = z
|
|
18
|
+
.enum(["solana", "base", "base-sepolia"])
|
|
19
|
+
.describe("The chain to operate on. Use 'solana' for Solana mainnet (or devnet if " +
|
|
20
|
+
"the Crossmint API key is a staging key — the SDK resolves the cluster " +
|
|
21
|
+
"from the API environment). Use 'base' for Base mainnet, 'base-sepolia' " +
|
|
22
|
+
"for Base testnet.");
|
|
23
|
+
function textResult(obj) {
|
|
24
|
+
return {
|
|
25
|
+
content: [
|
|
26
|
+
{ type: "text", text: JSON.stringify(obj, null, 2) },
|
|
27
|
+
],
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function errorResult(err) {
|
|
31
|
+
const code = classifyError(err);
|
|
32
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
33
|
+
return toolErrorResponse(code, message);
|
|
34
|
+
}
|
|
35
|
+
export function registerTools(server) {
|
|
36
|
+
// -------------------------------------------------------------------
|
|
37
|
+
// Tool 1: crossmint_create_wallet
|
|
38
|
+
// -------------------------------------------------------------------
|
|
39
|
+
server.registerTool("crossmint_create_wallet", {
|
|
40
|
+
title: "Create a Crossmint smart wallet",
|
|
41
|
+
description: "Creates a new Crossmint smart wallet on the given chain, using " +
|
|
42
|
+
"the server-side recovery signer configured via CROSSMINT_RECOVERY_SECRET. " +
|
|
43
|
+
"Note: calling this tool without an `alias` generates a NEW wallet " +
|
|
44
|
+
"on every call (non-deterministic). Pass an `alias` string to make " +
|
|
45
|
+
"wallet creation idempotent — the same alias always resolves to the " +
|
|
46
|
+
"same address. `owner` accepts Crossmint user locators like " +
|
|
47
|
+
"'email:user@example.com', 'userId:abc', 'x:handle', or the literal " +
|
|
48
|
+
"'COMPANY' for company-owned wallets. Free-form strings are rejected " +
|
|
49
|
+
"by the Crossmint API.",
|
|
50
|
+
inputSchema: {
|
|
51
|
+
chain: chainSchema,
|
|
52
|
+
owner: z
|
|
53
|
+
.string()
|
|
54
|
+
.optional()
|
|
55
|
+
.describe("Optional user locator (email:x@y.com, userId:abc, x:handle, " +
|
|
56
|
+
"phoneNumber:+123, twitter:handle) or 'COMPANY'."),
|
|
57
|
+
alias: z
|
|
58
|
+
.string()
|
|
59
|
+
.optional()
|
|
60
|
+
.describe("Optional alias string. Makes wallet creation deterministic — " +
|
|
61
|
+
"the same (recovery secret, chain, alias) tuple always resolves " +
|
|
62
|
+
"to the same wallet address."),
|
|
63
|
+
},
|
|
64
|
+
}, async ({ chain, owner, alias }) => {
|
|
65
|
+
try {
|
|
66
|
+
const result = await createWallet({ chain, owner, alias });
|
|
67
|
+
return textResult(result);
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
return errorResult(err);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
// -------------------------------------------------------------------
|
|
74
|
+
// Tool 2: crossmint_get_balance
|
|
75
|
+
// -------------------------------------------------------------------
|
|
76
|
+
server.registerTool("crossmint_get_balance", {
|
|
77
|
+
title: "Get on-chain balances for a Crossmint wallet",
|
|
78
|
+
description: "Returns the native token balance (SOL/ETH) and USDC balance for a " +
|
|
79
|
+
"Crossmint wallet, plus any additional token balances requested. " +
|
|
80
|
+
"Read-only: no signer required.",
|
|
81
|
+
inputSchema: {
|
|
82
|
+
address: z
|
|
83
|
+
.string()
|
|
84
|
+
.describe("The Crossmint wallet address to query."),
|
|
85
|
+
chain: chainSchema,
|
|
86
|
+
tokens: z
|
|
87
|
+
.array(z.string())
|
|
88
|
+
.optional()
|
|
89
|
+
.describe("Optional array of additional token symbols or mint/contract " +
|
|
90
|
+
"addresses to include in the response. Native token and USDC " +
|
|
91
|
+
"are always included regardless of this field."),
|
|
92
|
+
},
|
|
93
|
+
}, async ({ address, chain, tokens }) => {
|
|
94
|
+
try {
|
|
95
|
+
const result = await getBalance({ address, chain, tokens });
|
|
96
|
+
return textResult(result);
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
return errorResult(err);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
// -------------------------------------------------------------------
|
|
103
|
+
// Tool 3: crossmint_transfer_token
|
|
104
|
+
// -------------------------------------------------------------------
|
|
105
|
+
server.registerTool("crossmint_transfer_token", {
|
|
106
|
+
title: "Transfer tokens from a Crossmint wallet",
|
|
107
|
+
description: "Transfers tokens from a Crossmint smart wallet to any recipient " +
|
|
108
|
+
"address or user locator. Uses the server recovery signer and the " +
|
|
109
|
+
"Crossmint gasless relayer — no native gas token is required in " +
|
|
110
|
+
"the wallet. `amount` is in decimal human units (e.g. '0.01'), " +
|
|
111
|
+
"not atomic units.",
|
|
112
|
+
inputSchema: {
|
|
113
|
+
payerAddress: z
|
|
114
|
+
.string()
|
|
115
|
+
.describe("Address of the Crossmint wallet to transfer from."),
|
|
116
|
+
chain: chainSchema,
|
|
117
|
+
to: z
|
|
118
|
+
.string()
|
|
119
|
+
.describe("Recipient address or user locator (e.g. a Solana pubkey, an " +
|
|
120
|
+
"EVM 0x... address, or 'email:x@y.com')."),
|
|
121
|
+
token: z
|
|
122
|
+
.string()
|
|
123
|
+
.describe("Token symbol ('usdc', 'sol', 'eth') or raw mint/contract address."),
|
|
124
|
+
amount: z
|
|
125
|
+
.string()
|
|
126
|
+
.describe("Amount in decimal human units (e.g. '0.01' for 0.01 USDC)."),
|
|
127
|
+
},
|
|
128
|
+
}, async ({ payerAddress, chain, to, token, amount }) => {
|
|
129
|
+
try {
|
|
130
|
+
const result = await transferToken({
|
|
131
|
+
payerAddress,
|
|
132
|
+
chain,
|
|
133
|
+
to,
|
|
134
|
+
token,
|
|
135
|
+
amount,
|
|
136
|
+
});
|
|
137
|
+
return textResult(result);
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
return errorResult(err);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
// -------------------------------------------------------------------
|
|
144
|
+
// Tool 4: crossmint_pay_x402_endpoint
|
|
145
|
+
// -------------------------------------------------------------------
|
|
146
|
+
server.registerTool("crossmint_pay_x402_endpoint", {
|
|
147
|
+
title: "Pay an x402-protected HTTP endpoint",
|
|
148
|
+
description: "Fetches an HTTP URL, handles the x402 Payment Required (HTTP 402) " +
|
|
149
|
+
"challenge by transferring the requested amount of USDC from a " +
|
|
150
|
+
"Crossmint smart wallet, and returns the paid response body plus " +
|
|
151
|
+
"the on-chain transaction signature. Supports Solana mainnet in " +
|
|
152
|
+
"v0.1; EVM support is planned.",
|
|
153
|
+
inputSchema: {
|
|
154
|
+
payerAddress: z
|
|
155
|
+
.string()
|
|
156
|
+
.describe("Address of the Crossmint wallet that should fund the payment."),
|
|
157
|
+
chain: chainSchema,
|
|
158
|
+
url: z.string().url().describe("The x402-protected URL to fetch."),
|
|
159
|
+
method: z
|
|
160
|
+
.enum(["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD"])
|
|
161
|
+
.optional()
|
|
162
|
+
.describe("HTTP method. Defaults to GET."),
|
|
163
|
+
headers: z
|
|
164
|
+
.record(z.string(), z.string())
|
|
165
|
+
.optional()
|
|
166
|
+
.describe("Additional HTTP headers to send with the request."),
|
|
167
|
+
jsonBody: z
|
|
168
|
+
.any()
|
|
169
|
+
.optional()
|
|
170
|
+
.describe("JSON body to send with POST/PUT/PATCH requests. Ignored for GET."),
|
|
171
|
+
maxUsdcAtomic: z
|
|
172
|
+
.number()
|
|
173
|
+
.int()
|
|
174
|
+
.nonnegative()
|
|
175
|
+
.optional()
|
|
176
|
+
.describe("Safety guardrail: reject the payment if the 402 response asks " +
|
|
177
|
+
"for more than this many atomic USDC units (1 USDC = 1,000,000 " +
|
|
178
|
+
"atomic units). Recommended for agents to avoid runaway spend."),
|
|
179
|
+
},
|
|
180
|
+
}, async ({ payerAddress, chain, url, method, headers, jsonBody, maxUsdcAtomic }) => {
|
|
181
|
+
try {
|
|
182
|
+
const result = await payX402Endpoint({
|
|
183
|
+
url,
|
|
184
|
+
payerAddress,
|
|
185
|
+
chain,
|
|
186
|
+
method,
|
|
187
|
+
headers,
|
|
188
|
+
jsonBody,
|
|
189
|
+
maxUsdcAtomic: maxUsdcAtomic !== undefined ? BigInt(maxUsdcAtomic) : undefined,
|
|
190
|
+
});
|
|
191
|
+
return textResult(result);
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
return errorResult(err);
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "crossmint-wallets-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP server exposing Crossmint smart wallet primitives as tools for Claude Desktop, Continue.dev, Cline, Codex CLI, and any MCP-native client.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"crossmint-wallets-mcp": "dist/mcp/server.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "dist/index.js",
|
|
10
|
+
"types": "dist/index.d.ts",
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE"
|
|
15
|
+
],
|
|
16
|
+
"keywords": [
|
|
17
|
+
"crossmint",
|
|
18
|
+
"mcp",
|
|
19
|
+
"model-context-protocol",
|
|
20
|
+
"x402",
|
|
21
|
+
"solana",
|
|
22
|
+
"smart-wallet",
|
|
23
|
+
"agents",
|
|
24
|
+
"claude-desktop",
|
|
25
|
+
"cursor",
|
|
26
|
+
"continue",
|
|
27
|
+
"cline",
|
|
28
|
+
"lobster-cash",
|
|
29
|
+
"stablecoin"
|
|
30
|
+
],
|
|
31
|
+
"author": "",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@crossmint/wallets-sdk": "^1.0.7",
|
|
35
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
36
|
+
"@solana/spl-token": "^0.4.9",
|
|
37
|
+
"@solana/web3.js": "^1.95.0",
|
|
38
|
+
"@x402/core": "^2.9.0",
|
|
39
|
+
"@x402/svm": "^2.9.0",
|
|
40
|
+
"zod": "^3.25.0"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@types/express": "^5.0.6",
|
|
44
|
+
"@types/node": "^20.10.0",
|
|
45
|
+
"@x402/express": "^2.9.0",
|
|
46
|
+
"dotenv": "^16.4.5",
|
|
47
|
+
"express": "^5.2.1",
|
|
48
|
+
"rimraf": "^5.0.5",
|
|
49
|
+
"tsx": "^4.7.0",
|
|
50
|
+
"typescript": "^5.4.0"
|
|
51
|
+
},
|
|
52
|
+
"engines": {
|
|
53
|
+
"node": ">=20.0.0"
|
|
54
|
+
},
|
|
55
|
+
"scripts": {
|
|
56
|
+
"build": "tsc",
|
|
57
|
+
"start": "node dist/mcp/server.js",
|
|
58
|
+
"dev": "tsc --watch",
|
|
59
|
+
"demo": "tsx demo/smoke-test.ts",
|
|
60
|
+
"test:smoke": "tsx demo/smoke-test.ts",
|
|
61
|
+
"typecheck": "tsc --noEmit",
|
|
62
|
+
"clean": "rimraf dist"
|
|
63
|
+
}
|
|
64
|
+
}
|