@agentsbazaar/mcp 1.0.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 +131 -0
- package/dist/api.d.ts +15 -0
- package/dist/api.js +80 -0
- package/dist/api.js.map +1 -0
- package/dist/format.d.ts +47 -0
- package/dist/format.js +63 -0
- package/dist/format.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/payment.d.ts +6 -0
- package/dist/payment.js +73 -0
- package/dist/payment.js.map +1 -0
- package/dist/tools/agents.d.ts +2 -0
- package/dist/tools/agents.js +211 -0
- package/dist/tools/agents.js.map +1 -0
- package/dist/tools/discovery.d.ts +2 -0
- package/dist/tools/discovery.js +53 -0
- package/dist/tools/discovery.js.map +1 -0
- package/dist/tools/hiring.d.ts +2 -0
- package/dist/tools/hiring.js +120 -0
- package/dist/tools/hiring.js.map +1 -0
- package/dist/tools/jobs.d.ts +2 -0
- package/dist/tools/jobs.js +50 -0
- package/dist/tools/jobs.js.map +1 -0
- package/dist/tools/wallet.d.ts +2 -0
- package/dist/tools/wallet.js +157 -0
- package/dist/tools/wallet.js.map +1 -0
- package/dist/wallet.d.ts +19 -0
- package/dist/wallet.js +97 -0
- package/dist/wallet.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { Connection, PublicKey } from "@solana/web3.js";
|
|
3
|
+
import { TOKEN_PROGRAM_ID } from "@solana/spl-token";
|
|
4
|
+
import { walletExists, loadWallet, createWallet, importWallet, exportWallet, getWalletPath } from "../wallet.js";
|
|
5
|
+
const SOLANA_RPC = process.env.SOLANA_RPC_URL || "https://api.devnet.solana.com";
|
|
6
|
+
const USDC_MINT = process.env.SOLANA_CLUSTER === "mainnet-beta"
|
|
7
|
+
? "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
|
|
8
|
+
: "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU";
|
|
9
|
+
export function registerWalletTools(server) {
|
|
10
|
+
// ── setup_wallet ──
|
|
11
|
+
server.tool("setup_wallet", "Create a new Solana wallet or show existing one. The wallet is stored locally and used for agent registration and hiring.", {}, async () => {
|
|
12
|
+
try {
|
|
13
|
+
const { keypair, privateKeyBase58, isNew } = createWallet();
|
|
14
|
+
const pubkey = keypair.publicKey.toBase58();
|
|
15
|
+
if (isNew) {
|
|
16
|
+
return {
|
|
17
|
+
content: [
|
|
18
|
+
{
|
|
19
|
+
type: "text",
|
|
20
|
+
text: [
|
|
21
|
+
`Wallet created successfully!`,
|
|
22
|
+
``,
|
|
23
|
+
`**Public Key:** \`${pubkey}\``,
|
|
24
|
+
`**Private Key:** \`${privateKeyBase58}\``,
|
|
25
|
+
``,
|
|
26
|
+
`> **IMPORTANT:** Save your private key now. It won't be shown again.`,
|
|
27
|
+
`> You can export it later with the \`export_wallet\` tool.`,
|
|
28
|
+
``,
|
|
29
|
+
`**Next steps:**`,
|
|
30
|
+
`1. Deposit USDC (Solana) to \`${pubkey}\` to start hiring agents`,
|
|
31
|
+
`2. Use \`register_agent\` to register your AI agent`,
|
|
32
|
+
`3. Use \`hire_agent\` to hire other agents`,
|
|
33
|
+
``,
|
|
34
|
+
`Wallet stored at: \`${getWalletPath()}\``,
|
|
35
|
+
].join("\n"),
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
content: [
|
|
42
|
+
{
|
|
43
|
+
type: "text",
|
|
44
|
+
text: [
|
|
45
|
+
`Wallet already exists.`,
|
|
46
|
+
``,
|
|
47
|
+
`**Public Key:** \`${pubkey}\``,
|
|
48
|
+
``,
|
|
49
|
+
`Use \`export_wallet\` to see your private key.`,
|
|
50
|
+
`Use \`check_balance\` to see your USDC balance.`,
|
|
51
|
+
].join("\n"),
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
return { content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : err}` }] };
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
// ── import_wallet ──
|
|
61
|
+
server.tool("import_wallet", "Import an existing Solana wallet from a private key (base58 or JSON array format).", { private_key: z.string().describe("Private key in base58 or JSON array format") }, async ({ private_key }) => {
|
|
62
|
+
try {
|
|
63
|
+
if (walletExists() && !process.env.SOLANA_PRIVATE_KEY) {
|
|
64
|
+
return {
|
|
65
|
+
content: [
|
|
66
|
+
{
|
|
67
|
+
type: "text",
|
|
68
|
+
text: [
|
|
69
|
+
`A wallet already exists at \`${getWalletPath()}\`.`,
|
|
70
|
+
`Importing will **overwrite** the existing wallet.`,
|
|
71
|
+
``,
|
|
72
|
+
`To proceed, delete the existing wallet file first:`,
|
|
73
|
+
`\`rm ${getWalletPath()}\``,
|
|
74
|
+
``,
|
|
75
|
+
`Then run import_wallet again.`,
|
|
76
|
+
].join("\n"),
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
const keypair = importWallet(private_key);
|
|
82
|
+
return {
|
|
83
|
+
content: [
|
|
84
|
+
{
|
|
85
|
+
type: "text",
|
|
86
|
+
text: [
|
|
87
|
+
`Wallet imported successfully!`,
|
|
88
|
+
``,
|
|
89
|
+
`**Public Key:** \`${keypair.publicKey.toBase58()}\``,
|
|
90
|
+
`Stored at: \`${getWalletPath()}\``,
|
|
91
|
+
].join("\n"),
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
return { content: [{ type: "text", text: `Import failed: ${err instanceof Error ? err.message : err}` }] };
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
// ── export_wallet ──
|
|
101
|
+
server.tool("export_wallet", "Show your wallet's private key for backup or import into other wallets (Phantom, Solflare, etc).", {}, async () => {
|
|
102
|
+
try {
|
|
103
|
+
const { publicKey, privateKeyBase58 } = exportWallet();
|
|
104
|
+
return {
|
|
105
|
+
content: [
|
|
106
|
+
{
|
|
107
|
+
type: "text",
|
|
108
|
+
text: [
|
|
109
|
+
`**Public Key:** \`${publicKey}\``,
|
|
110
|
+
`**Private Key:** \`${privateKeyBase58}\``,
|
|
111
|
+
``,
|
|
112
|
+
`> **WARNING:** Keep this private. Anyone with this key controls your funds.`,
|
|
113
|
+
`> You can import this key into Phantom, Solflare, or any Solana wallet.`,
|
|
114
|
+
].join("\n"),
|
|
115
|
+
},
|
|
116
|
+
],
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
return { content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : err}` }] };
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
// ── check_balance ──
|
|
124
|
+
server.tool("check_balance", "Check SOL and USDC balance for your wallet on Solana.", {}, async () => {
|
|
125
|
+
try {
|
|
126
|
+
const keypair = loadWallet();
|
|
127
|
+
const pubkey = keypair.publicKey.toBase58();
|
|
128
|
+
const connection = new Connection(SOLANA_RPC, "confirmed");
|
|
129
|
+
// SOL balance
|
|
130
|
+
const solBalance = await connection.getBalance(keypair.publicKey);
|
|
131
|
+
const solFormatted = (solBalance / 1_000_000_000).toFixed(4);
|
|
132
|
+
// USDC balance
|
|
133
|
+
const usdcMint = new PublicKey(USDC_MINT);
|
|
134
|
+
const tokenAccounts = await connection.getTokenAccountsByOwner(keypair.publicKey, {
|
|
135
|
+
mint: usdcMint,
|
|
136
|
+
programId: TOKEN_PROGRAM_ID,
|
|
137
|
+
});
|
|
138
|
+
let usdcBalance = 0;
|
|
139
|
+
if (tokenAccounts.value.length > 0) {
|
|
140
|
+
const accountData = tokenAccounts.value[0].account.data;
|
|
141
|
+
// SPL token account layout: amount is at offset 64, 8 bytes LE
|
|
142
|
+
usdcBalance = Number(accountData.readBigUInt64LE(64));
|
|
143
|
+
}
|
|
144
|
+
const usdcFormatted = (usdcBalance / 1_000_000).toFixed(2);
|
|
145
|
+
const lines = [`**Wallet:** \`${pubkey}\``, `**SOL:** ${solFormatted} SOL`, `**USDC:** $${usdcFormatted}`];
|
|
146
|
+
if (usdcBalance === 0) {
|
|
147
|
+
lines.push(``);
|
|
148
|
+
lines.push(`No USDC balance. Deposit USDC (Solana) to \`${pubkey}\` to start hiring agents.`);
|
|
149
|
+
}
|
|
150
|
+
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
return { content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : err}` }] };
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=wallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/tools/wallet.ts"],"names":[],"mappings":"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"}
|
package/dist/wallet.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Keypair } from "@solana/web3.js";
|
|
2
|
+
export declare function getWalletPath(): string;
|
|
3
|
+
export declare function walletExists(): boolean;
|
|
4
|
+
export declare function loadWallet(): Keypair;
|
|
5
|
+
export declare function createWallet(): {
|
|
6
|
+
keypair: Keypair;
|
|
7
|
+
privateKeyBase58: string;
|
|
8
|
+
isNew: boolean;
|
|
9
|
+
};
|
|
10
|
+
export declare function importWallet(privateKey: string): Keypair;
|
|
11
|
+
export declare function exportWallet(): {
|
|
12
|
+
publicKey: string;
|
|
13
|
+
privateKeyBase58: string;
|
|
14
|
+
};
|
|
15
|
+
export declare function signMessage(keypair: Keypair, action: string): {
|
|
16
|
+
address: string;
|
|
17
|
+
signature: string;
|
|
18
|
+
message: string;
|
|
19
|
+
};
|
package/dist/wallet.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { Keypair } from "@solana/web3.js";
|
|
2
|
+
import nacl from "tweetnacl";
|
|
3
|
+
import bs58 from "bs58";
|
|
4
|
+
import * as fs from "fs";
|
|
5
|
+
import * as path from "path";
|
|
6
|
+
import * as os from "os";
|
|
7
|
+
const WALLET_DIR = path.join(os.homedir(), ".agentbazaar");
|
|
8
|
+
const WALLET_PATH = path.join(WALLET_DIR, "wallet.json");
|
|
9
|
+
export function getWalletPath() {
|
|
10
|
+
return WALLET_PATH;
|
|
11
|
+
}
|
|
12
|
+
export function walletExists() {
|
|
13
|
+
if (process.env.SOLANA_PRIVATE_KEY)
|
|
14
|
+
return true;
|
|
15
|
+
return fs.existsSync(WALLET_PATH);
|
|
16
|
+
}
|
|
17
|
+
export function loadWallet() {
|
|
18
|
+
// Environment variable takes priority
|
|
19
|
+
const envKey = process.env.SOLANA_PRIVATE_KEY;
|
|
20
|
+
if (envKey) {
|
|
21
|
+
return parsePrivateKey(envKey);
|
|
22
|
+
}
|
|
23
|
+
if (!fs.existsSync(WALLET_PATH)) {
|
|
24
|
+
throw new Error("No wallet found. Use setup_wallet to create one.");
|
|
25
|
+
}
|
|
26
|
+
const raw = JSON.parse(fs.readFileSync(WALLET_PATH, "utf-8"));
|
|
27
|
+
return Keypair.fromSecretKey(Uint8Array.from(raw.secretKey));
|
|
28
|
+
}
|
|
29
|
+
export function createWallet() {
|
|
30
|
+
if (fs.existsSync(WALLET_PATH)) {
|
|
31
|
+
const existing = loadWallet();
|
|
32
|
+
return {
|
|
33
|
+
keypair: existing,
|
|
34
|
+
privateKeyBase58: bs58.encode(existing.secretKey),
|
|
35
|
+
isNew: false,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const keypair = Keypair.generate();
|
|
39
|
+
// Create directory with restricted permissions
|
|
40
|
+
if (!fs.existsSync(WALLET_DIR)) {
|
|
41
|
+
fs.mkdirSync(WALLET_DIR, { recursive: true, mode: 0o700 });
|
|
42
|
+
}
|
|
43
|
+
const walletData = {
|
|
44
|
+
publicKey: keypair.publicKey.toBase58(),
|
|
45
|
+
secretKey: Array.from(keypair.secretKey),
|
|
46
|
+
createdAt: new Date().toISOString(),
|
|
47
|
+
};
|
|
48
|
+
fs.writeFileSync(WALLET_PATH, JSON.stringify(walletData, null, 2), { mode: 0o600 });
|
|
49
|
+
return {
|
|
50
|
+
keypair,
|
|
51
|
+
privateKeyBase58: bs58.encode(keypair.secretKey),
|
|
52
|
+
isNew: true,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export function importWallet(privateKey) {
|
|
56
|
+
const keypair = parsePrivateKey(privateKey);
|
|
57
|
+
if (!fs.existsSync(WALLET_DIR)) {
|
|
58
|
+
fs.mkdirSync(WALLET_DIR, { recursive: true, mode: 0o700 });
|
|
59
|
+
}
|
|
60
|
+
const walletData = {
|
|
61
|
+
publicKey: keypair.publicKey.toBase58(),
|
|
62
|
+
secretKey: Array.from(keypair.secretKey),
|
|
63
|
+
createdAt: new Date().toISOString(),
|
|
64
|
+
};
|
|
65
|
+
fs.writeFileSync(WALLET_PATH, JSON.stringify(walletData, null, 2), { mode: 0o600 });
|
|
66
|
+
return keypair;
|
|
67
|
+
}
|
|
68
|
+
export function exportWallet() {
|
|
69
|
+
const keypair = loadWallet();
|
|
70
|
+
return {
|
|
71
|
+
publicKey: keypair.publicKey.toBase58(),
|
|
72
|
+
privateKeyBase58: bs58.encode(keypair.secretKey),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
export function signMessage(keypair, action) {
|
|
76
|
+
const timestamp = Date.now();
|
|
77
|
+
const message = `agentbazaar:${action}:${timestamp}`;
|
|
78
|
+
const messageBytes = new TextEncoder().encode(message);
|
|
79
|
+
const sig = nacl.sign.detached(messageBytes, keypair.secretKey);
|
|
80
|
+
return {
|
|
81
|
+
address: keypair.publicKey.toBase58(),
|
|
82
|
+
signature: Buffer.from(sig).toString("base64"),
|
|
83
|
+
message,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function parsePrivateKey(input) {
|
|
87
|
+
const trimmed = input.trim();
|
|
88
|
+
// Try JSON array format: [1,2,3,...]
|
|
89
|
+
if (trimmed.startsWith("[")) {
|
|
90
|
+
const arr = JSON.parse(trimmed);
|
|
91
|
+
return Keypair.fromSecretKey(Uint8Array.from(arr));
|
|
92
|
+
}
|
|
93
|
+
// Try base58
|
|
94
|
+
const decoded = bs58.decode(trimmed);
|
|
95
|
+
return Keypair.fromSecretKey(decoded);
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=wallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@agentsbazaar/mcp",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "AgentBazaar MCP server — register, discover, and hire AI agents on Solana",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"agentbazaar-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"engines": {
|
|
14
|
+
"node": ">=20"
|
|
15
|
+
},
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "https://github.com/runningoffcode/agentbazaar.git",
|
|
19
|
+
"directory": "mcp-local"
|
|
20
|
+
},
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsc",
|
|
23
|
+
"test": "vitest run",
|
|
24
|
+
"prepublishOnly": "npm run build",
|
|
25
|
+
"start": "node dist/index.js",
|
|
26
|
+
"dev": "tsx src/index.ts"
|
|
27
|
+
},
|
|
28
|
+
"keywords": [
|
|
29
|
+
"mcp",
|
|
30
|
+
"agentbazaar",
|
|
31
|
+
"solana",
|
|
32
|
+
"ai-agents",
|
|
33
|
+
"x402"
|
|
34
|
+
],
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
38
|
+
"@solana/kit": "^5.5.1",
|
|
39
|
+
"@solana/spl-token": "^0.4.0",
|
|
40
|
+
"@solana/web3.js": "^1.98.0",
|
|
41
|
+
"@x402/core": "^2.7.0",
|
|
42
|
+
"@x402/svm": "^2.7.0",
|
|
43
|
+
"bs58": "^6.0.0",
|
|
44
|
+
"tweetnacl": "^1.0.3",
|
|
45
|
+
"zod": "^3.24.0"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/node": "^22.0.0",
|
|
49
|
+
"tsx": "^4.19.0",
|
|
50
|
+
"typescript": "^5.7.0",
|
|
51
|
+
"vitest": "^4.1.0"
|
|
52
|
+
}
|
|
53
|
+
}
|