@agentsbazaar/mcp 1.0.0 → 1.2.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.
Files changed (40) hide show
  1. package/README.md +107 -100
  2. package/dist/format.d.ts +1 -0
  3. package/dist/format.js +2 -0
  4. package/dist/format.js.map +1 -1
  5. package/dist/index.js +87 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/tools/agents.js +64 -3
  8. package/dist/tools/agents.js.map +1 -1
  9. package/dist/tools/credits.d.ts +5 -0
  10. package/dist/tools/credits.js +101 -0
  11. package/dist/tools/credits.js.map +1 -0
  12. package/dist/tools/custodialWallet.d.ts +2 -0
  13. package/dist/tools/custodialWallet.js +85 -0
  14. package/dist/tools/custodialWallet.js.map +1 -0
  15. package/dist/tools/email.d.ts +5 -0
  16. package/dist/tools/email.js +179 -0
  17. package/dist/tools/email.js.map +1 -0
  18. package/dist/tools/hiring.js +56 -1
  19. package/dist/tools/hiring.js.map +1 -1
  20. package/dist/tools/management.d.ts +2 -0
  21. package/dist/tools/management.js +115 -0
  22. package/dist/tools/management.js.map +1 -0
  23. package/dist/tools/notifications.d.ts +5 -0
  24. package/dist/tools/notifications.js +73 -0
  25. package/dist/tools/notifications.js.map +1 -0
  26. package/dist/tools/prepaid.d.ts +5 -0
  27. package/dist/tools/prepaid.js +112 -0
  28. package/dist/tools/prepaid.js.map +1 -0
  29. package/dist/tools/sessions.d.ts +2 -0
  30. package/dist/tools/sessions.js +159 -0
  31. package/dist/tools/sessions.js.map +1 -0
  32. package/dist/tools/trust.d.ts +2 -0
  33. package/dist/tools/trust.js +207 -0
  34. package/dist/tools/trust.js.map +1 -0
  35. package/dist/tools/upload.d.ts +2 -0
  36. package/dist/tools/upload.js +58 -0
  37. package/dist/tools/upload.js.map +1 -0
  38. package/dist/tools/wallet.js +1 -1
  39. package/dist/tools/wallet.js.map +1 -1
  40. package/package.json +21 -10
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/tools/notifications.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhC,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,sFAAsF,EACtF,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC,EAAE,EAC5F,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,IAAI,CAAC;YACH,IAAI,CAAC,YAAY,EAAE;gBAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;YACtF,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;YACnD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,CAAC,UAAU,EAAE,wBAAwB,KAAK,EAAE,EAAE;gBAC1E,OAAO,EAAE;oBACP,kBAAkB,EAAE,IAAI,CAAC,OAAO;oBAChC,oBAAoB,EAAE,IAAI,CAAC,SAAS;oBACpC,kBAAkB,EAAE,IAAI,CAAC,OAAO;iBACjC;aACF,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC,EAAE,CAAC;YAC1F,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAQ7B,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM;gBAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC;YACnG,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,CAC7E,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;QACnE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QACrG,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,kHAAkH,EAClH;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAClE,MAAM,EAAE,CAAC;aACN,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,EAAE;aACV,QAAQ,CACP,mHAAmH,CACpH;KACJ,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,IAAI,CAAC,YAAY,EAAE;gBAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;YACtF,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,CAAC,UAAU,EAAE,wBAAwB,EAAE;gBACnE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,kBAAkB,EAAE,IAAI,CAAC,OAAO;oBAChC,oBAAoB,EAAE,IAAI,CAAC,SAAS;oBACpC,kBAAkB,EAAE,IAAI,CAAC,OAAO;iBACjC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;aACtC,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwE,CAAC;YACvG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,mCAAmC,IAAI,CAAC,GAAG,iBAAiB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;yBAC3F;qBACF;iBACF,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;QACxE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QACrG,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * MCP tools for MPP prepaid sessions — open, extend, and manage prepaid agent sessions.
3
+ */
4
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
+ export declare function registerPrepaidTools(server: McpServer): void;
@@ -0,0 +1,112 @@
1
+ /**
2
+ * MCP tools for MPP prepaid sessions — open, extend, and manage prepaid agent sessions.
3
+ */
4
+ import { z } from "zod";
5
+ import { walletExists, loadWallet, signMessage } from "../wallet.js";
6
+ import { api } from "../api.js";
7
+ export function registerPrepaidTools(server) {
8
+ server.tool("open_prepaid_session", "Open a prepaid session with an agent. Pay once up front, then send unlimited messages until the budget runs out. Much faster than per-message payments.", {
9
+ agent: z.string().describe("Agent wallet address"),
10
+ budget: z.string().describe("Budget in USDC (e.g. '5.00' for $5)"),
11
+ }, async ({ agent, budget }) => {
12
+ try {
13
+ if (!walletExists()) {
14
+ return { content: [{ type: "text", text: "No wallet found. Use `setup_wallet` first." }] };
15
+ }
16
+ const keypair = loadWallet();
17
+ const auth = signMessage(keypair, "chat");
18
+ const budgetUsdc = parseFloat(budget);
19
+ if (isNaN(budgetUsdc) || budgetUsdc <= 0) {
20
+ return { content: [{ type: "text", text: "Budget must be a positive number (e.g. '5.00')" }] };
21
+ }
22
+ const res = await fetch(`${api.getBaseUrl()}/sessions/prepaid`, {
23
+ method: "POST",
24
+ headers: {
25
+ "Content-Type": "application/json",
26
+ "X-Wallet-Address": auth.address,
27
+ "X-Wallet-Signature": auth.signature,
28
+ "X-Wallet-Message": auth.message,
29
+ },
30
+ body: JSON.stringify({ agent, budgetUsdc }),
31
+ });
32
+ const data = (await res.json());
33
+ if (data.transaction) {
34
+ return {
35
+ content: [
36
+ {
37
+ type: "text",
38
+ text: [
39
+ `**Prepaid Session Quote**`,
40
+ `Agent: ${data.agent?.name || agent}`,
41
+ `Budget: $${budgetUsdc.toFixed(2)}`,
42
+ `Est. messages: ${data.estimatedMessages}`,
43
+ ``,
44
+ `Sign the transaction to open the session. Use \`confirm_prepaid_session\` with the signed transaction.`,
45
+ ].join("\n"),
46
+ },
47
+ ],
48
+ };
49
+ }
50
+ if (data.sessionId) {
51
+ return {
52
+ content: [
53
+ {
54
+ type: "text",
55
+ text: [
56
+ `**Prepaid Session Opened!**`,
57
+ `Session: \`${data.sessionId}\``,
58
+ `Budget: $${budgetUsdc.toFixed(2)}`,
59
+ `Est. messages: ${data.estimatedMessages}`,
60
+ ``,
61
+ `Use \`send_message\` with this sessionId. Messages are instant — no per-message payment.`,
62
+ ].join("\n"),
63
+ },
64
+ ],
65
+ };
66
+ }
67
+ return { content: [{ type: "text", text: `Error: ${data.error || "Unknown error"}` }] };
68
+ }
69
+ catch (err) {
70
+ return { content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : err}` }] };
71
+ }
72
+ });
73
+ server.tool("extend_session", "Add more budget to an existing prepaid session without closing it.", {
74
+ sessionId: z.string().describe("Session ID to extend"),
75
+ additionalUsdc: z.string().describe("Additional budget in USDC (e.g. '2.00')"),
76
+ }, async ({ sessionId, additionalUsdc }) => {
77
+ try {
78
+ if (!walletExists()) {
79
+ return { content: [{ type: "text", text: "No wallet found. Use `setup_wallet` first." }] };
80
+ }
81
+ const keypair = loadWallet();
82
+ const auth = signMessage(keypair, "chat");
83
+ const amount = parseFloat(additionalUsdc);
84
+ const res = await fetch(`${api.getBaseUrl()}/sessions/${sessionId}/extend`, {
85
+ method: "POST",
86
+ headers: {
87
+ "Content-Type": "application/json",
88
+ "X-Wallet-Address": auth.address,
89
+ "X-Wallet-Signature": auth.signature,
90
+ "X-Wallet-Message": auth.message,
91
+ },
92
+ body: JSON.stringify({ additionalUsdc: amount }),
93
+ });
94
+ const data = (await res.json());
95
+ if (data.sessionId) {
96
+ return {
97
+ content: [
98
+ {
99
+ type: "text",
100
+ text: `Session extended! Budget: $${data.budgetUsdc} | Spent: $${data.spentUsdc} | Remaining: $${data.remainingUsdc}`,
101
+ },
102
+ ],
103
+ };
104
+ }
105
+ return { content: [{ type: "text", text: `Error: ${data.error || "Failed to extend"}` }] };
106
+ }
107
+ catch (err) {
108
+ return { content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : err}` }] };
109
+ }
110
+ });
111
+ }
112
+ //# sourceMappingURL=prepaid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepaid.js","sourceRoot":"","sources":["../../src/tools/prepaid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerSessionTools(server: McpServer): void;
@@ -0,0 +1,159 @@
1
+ import { z } from "zod";
2
+ import { walletExists, loadWallet, signMessage } from "../wallet.js";
3
+ import { api } from "../api.js";
4
+ import { postWithPayment } from "../payment.js";
5
+ import { formatUsdc } from "../format.js";
6
+ export function registerSessionTools(server) {
7
+ // ── start_session ──
8
+ server.tool("start_session", "Start a multi-turn conversation with an agent. Returns a sessionId for subsequent messages.", {
9
+ task: z.string().min(1).describe("Initial message/task for the agent"),
10
+ agent: z.string().optional().describe("Target agent by wallet address"),
11
+ skills: z.string().optional().describe("Filter agents by skills"),
12
+ budgetLimit: z.number().optional().describe("Max spend in USDC micro-units for this session"),
13
+ }, async ({ task, agent, skills, budgetLimit }) => {
14
+ try {
15
+ if (!walletExists()) {
16
+ return { content: [{ type: "text", text: "No wallet found. Use `setup_wallet` first." }] };
17
+ }
18
+ const keypair = loadWallet();
19
+ const baseUrl = api.getBaseUrl();
20
+ const body = { task, createSession: true };
21
+ if (agent)
22
+ body.agent = agent;
23
+ if (skills)
24
+ body.skills = skills;
25
+ if (budgetLimit)
26
+ body.budgetLimit = budgetLimit;
27
+ const result = await postWithPayment(`${baseUrl}/call`, body, keypair);
28
+ const output = typeof result.result === "string" ? result.result : JSON.stringify(result.result, null, 2);
29
+ const lines = [
30
+ `**Session started:** \`${result.sessionId}\``,
31
+ `**Agent:** ${result.agent.name} (\`${result.agent.authority}\`)`,
32
+ `**Price:** $${result.agent.price} USDC`,
33
+ `**Verification:** ${result.verification.score}/100`,
34
+ ``,
35
+ `---`,
36
+ `**Agent response:**`,
37
+ output,
38
+ ``,
39
+ `_Continue with: send_message sessionId: "${result.sessionId}" message: "..."_`,
40
+ ];
41
+ return { content: [{ type: "text", text: lines.join("\n") }] };
42
+ }
43
+ catch (err) {
44
+ return {
45
+ content: [{ type: "text", text: `Session start failed: ${err instanceof Error ? err.message : err}` }],
46
+ };
47
+ }
48
+ });
49
+ // ── send_message ──
50
+ server.tool("send_message", "Send a follow-up message in an existing session. The agent receives full conversation history.", {
51
+ sessionId: z.string().min(1).describe("Session ID from start_session"),
52
+ message: z.string().min(1).describe("Message to send to the agent"),
53
+ file_url: z
54
+ .string()
55
+ .optional()
56
+ .describe("URL of an uploaded file to include with the message (from upload_file)"),
57
+ }, async ({ sessionId, message, file_url }) => {
58
+ try {
59
+ if (!walletExists()) {
60
+ return { content: [{ type: "text", text: "No wallet found. Use `setup_wallet` first." }] };
61
+ }
62
+ const keypair = loadWallet();
63
+ const baseUrl = api.getBaseUrl();
64
+ const body = { task: message, sessionId };
65
+ if (file_url)
66
+ body.file_url = file_url;
67
+ const result = await postWithPayment(`${baseUrl}/call`, body, keypair);
68
+ const output = typeof result.result === "string" ? result.result : JSON.stringify(result.result, null, 2);
69
+ const lines = [
70
+ `**Session:** \`${sessionId}\``,
71
+ `**Price:** $${result.agent.price} USDC`,
72
+ `**Verification:** ${result.verification.score}/100`,
73
+ ``,
74
+ `---`,
75
+ `**Agent response:**`,
76
+ output,
77
+ ];
78
+ return { content: [{ type: "text", text: lines.join("\n") }] };
79
+ }
80
+ catch (err) {
81
+ return { content: [{ type: "text", text: `Message failed: ${err instanceof Error ? err.message : err}` }] };
82
+ }
83
+ });
84
+ // ── close_session ──
85
+ server.tool("close_session", "Close an active session. No more messages can be sent after closing.", {
86
+ sessionId: z.string().min(1).describe("Session ID to close"),
87
+ }, async ({ sessionId }) => {
88
+ try {
89
+ if (!walletExists()) {
90
+ return { content: [{ type: "text", text: "No wallet found. Use `setup_wallet` first." }] };
91
+ }
92
+ const keypair = loadWallet();
93
+ const auth = signMessage(keypair, "session");
94
+ const baseUrl = api.getBaseUrl();
95
+ const res = await fetch(`${baseUrl}/sessions/${sessionId}/close`, {
96
+ method: "POST",
97
+ headers: {
98
+ "Content-Type": "application/json",
99
+ "X-Wallet-Address": auth.address,
100
+ "X-Wallet-Signature": auth.signature,
101
+ "X-Wallet-Message": auth.message,
102
+ },
103
+ });
104
+ const data = (await res.json());
105
+ if (!res.ok) {
106
+ return { content: [{ type: "text", text: `Close failed: ${data.error || `HTTP ${res.status}`}` }] };
107
+ }
108
+ return {
109
+ content: [
110
+ {
111
+ type: "text",
112
+ text: [
113
+ `Session \`${sessionId}\` closed.`,
114
+ `Total spent: $${data.totalSpent} USDC`,
115
+ `Messages: ${data.messageCount}`,
116
+ ].join("\n"),
117
+ },
118
+ ],
119
+ };
120
+ }
121
+ catch (err) {
122
+ return { content: [{ type: "text", text: `Close failed: ${err instanceof Error ? err.message : err}` }] };
123
+ }
124
+ });
125
+ // ── list_sessions ──
126
+ server.tool("list_sessions", "List your active, closed, or expired sessions.", {
127
+ status: z.enum(["active", "closed", "expired"]).optional().describe("Filter by session status"),
128
+ }, async ({ status }) => {
129
+ try {
130
+ if (!walletExists()) {
131
+ return { content: [{ type: "text", text: "No wallet found. Use `setup_wallet` first." }] };
132
+ }
133
+ const keypair = loadWallet();
134
+ const buyer = keypair.publicKey.toBase58();
135
+ const baseUrl = api.getBaseUrl();
136
+ const params = new URLSearchParams({ buyer });
137
+ if (status)
138
+ params.set("status", status);
139
+ const res = await fetch(`${baseUrl}/sessions?${params.toString()}`);
140
+ const data = (await res.json());
141
+ if (!res.ok) {
142
+ return { content: [{ type: "text", text: `Failed: ${data.error || `HTTP ${res.status}`}` }] };
143
+ }
144
+ if (data.sessions.length === 0) {
145
+ return { content: [{ type: "text", text: "No sessions found." }] };
146
+ }
147
+ const lines = data.sessions.map((s) => [
148
+ `**${s.id}** [${s.status}]`,
149
+ ` Agent: \`${s.agent_auth}\``,
150
+ ` Messages: ${s.message_count} | Spent: $${formatUsdc(s.total_spent)} USDC`,
151
+ ].join("\n"));
152
+ return { content: [{ type: "text", text: lines.join("\n\n") }] };
153
+ }
154
+ catch (err) {
155
+ return { content: [{ type: "text", text: `Failed: ${err instanceof Error ? err.message : err}` }] };
156
+ }
157
+ });
158
+ }
159
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/tools/sessions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerTrustTools(server: McpServer): void;
@@ -0,0 +1,207 @@
1
+ import { z } from "zod";
2
+ import { api } from "../api.js";
3
+ import { walletExists, loadWallet, signMessage } from "../wallet.js";
4
+ const TIER_NAMES = ["Unrated", "Bronze", "Silver", "Gold", "Platinum"];
5
+ const TIER_ICONS = ["--", "Cu", "Ag", "Au", "Pt"];
6
+ export function registerTrustTools(server) {
7
+ server.tool("get_trust_tier", "Get an agent's trust tier, ATOM scores, and verified feedback count. Trust tiers: Unrated (0), Bronze (1), Silver (2), Gold (3), Platinum (4).", {
8
+ agent_pubkey: z.string().min(32).max(44).describe("Agent pubkey (base58)"),
9
+ }, async ({ agent_pubkey }) => {
10
+ try {
11
+ const data = await api.get(`/agents/${agent_pubkey}/trust`);
12
+ const lines = [
13
+ `**Trust Tier:** ${TIER_ICONS[data.trustTier]} ${data.tierName}`,
14
+ `**Quality:** ${(data.quality * 100).toFixed(1)}%`,
15
+ `**Confidence:** ${(data.confidence * 100).toFixed(1)}%`,
16
+ `**Risk:** ${(data.risk * 100).toFixed(1)}%`,
17
+ `**Diversity:** ${(data.diversity * 100).toFixed(1)}%`,
18
+ `**Verified Feedbacks:** ${data.verifiedFeedbackCount}`,
19
+ ];
20
+ return { content: [{ type: "text", text: lines.join("\n") }] };
21
+ }
22
+ catch (err) {
23
+ return {
24
+ content: [{ type: "text", text: `Failed to get trust data: ${err instanceof Error ? err.message : err}` }],
25
+ };
26
+ }
27
+ });
28
+ server.tool("get_leaderboard", "Get the top-ranked agents on AgentBazaar by trust tier and reputation.", {
29
+ limit: z.number().min(1).max(50).default(10).describe("Number of agents to show"),
30
+ min_tier: z
31
+ .number()
32
+ .min(0)
33
+ .max(4)
34
+ .default(0)
35
+ .describe("Minimum trust tier (0=all, 1=Bronze+, 2=Silver+, 3=Gold+, 4=Platinum)"),
36
+ }, async ({ limit, min_tier }) => {
37
+ try {
38
+ const params = new URLSearchParams({ limit: String(limit) });
39
+ if (min_tier > 0)
40
+ params.set("minTier", String(min_tier));
41
+ const data = await api.get(`/leaderboard?${params}`);
42
+ if (data.agents.length === 0) {
43
+ return { content: [{ type: "text", text: "No agents found matching the criteria." }] };
44
+ }
45
+ const lines = ["**AgentBazaar Leaderboard**\n"];
46
+ for (const entry of data.agents) {
47
+ const tier = `${TIER_ICONS[entry.trustTier]} ${entry.tierName}`;
48
+ lines.push(`**#${entry.rank}** ${entry.agent.name} | ${tier} | Score: ${entry.averageScore.toFixed(1)} | Jobs: ${entry.agent.total_jobs_completed} | Feedbacks: ${entry.totalFeedbacks}`);
49
+ }
50
+ return { content: [{ type: "text", text: lines.join("\n") }] };
51
+ }
52
+ catch (err) {
53
+ return {
54
+ content: [{ type: "text", text: `Failed to get leaderboard: ${err instanceof Error ? err.message : err}` }],
55
+ };
56
+ }
57
+ });
58
+ server.tool("get_feedback", "Get all feedback for an agent with verification status and responses.", {
59
+ agent_pubkey: z.string().min(32).max(44).describe("Agent pubkey (base58)"),
60
+ }, async ({ agent_pubkey }) => {
61
+ try {
62
+ const data = await api.get(`/agents/${agent_pubkey}/feedback`);
63
+ const lines = [`**Feedback** (${data.verifiedCount} verified / ${data.totalCount} total)\n`];
64
+ for (const fb of data.feedback) {
65
+ const status = fb.revoked ? "[REVOKED]" : fb.verified ? "[VERIFIED]" : "[UNVERIFIED]";
66
+ lines.push(`${status} Score: ${fb.score} | From: ${fb.client.slice(0, 8)}... | Tags: ${fb.tag1}, ${fb.tag2}`);
67
+ for (const resp of fb.responses) {
68
+ lines.push(` -> Agent response from ${resp.responder.slice(0, 8)}...`);
69
+ }
70
+ }
71
+ return { content: [{ type: "text", text: lines.join("\n") }] };
72
+ }
73
+ catch (err) {
74
+ return {
75
+ content: [{ type: "text", text: `Failed to get feedback: ${err instanceof Error ? err.message : err}` }],
76
+ };
77
+ }
78
+ });
79
+ server.tool("submit_review", "Submit an on-chain review for an agent after a completed job. Your wallet signs the review, platform pays gas. Score is 1-5 stars.", {
80
+ agent_pubkey: z.string().min(32).max(44).describe("Agent pubkey to review"),
81
+ job_id: z.number().int().positive().describe("Job ID from the completed job"),
82
+ score: z.number().int().min(1).max(5).describe("Star rating 1-5"),
83
+ comment: z.string().max(200).optional().describe("Optional review comment"),
84
+ }, async ({ agent_pubkey, job_id, score, comment }) => {
85
+ try {
86
+ if (!walletExists()) {
87
+ return { content: [{ type: "text", text: "No wallet found. Use `setup_wallet` first." }] };
88
+ }
89
+ const keypair = loadWallet();
90
+ const auth = signMessage(keypair, "feedback");
91
+ const baseUrl = api.getBaseUrl();
92
+ // Step 1: Build unsigned tx
93
+ const buildRes = await fetch(`${baseUrl}/feedback/build`, {
94
+ method: "POST",
95
+ headers: {
96
+ "Content-Type": "application/json",
97
+ "X-Wallet-Address": auth.address,
98
+ "X-Wallet-Signature": auth.signature,
99
+ "X-Wallet-Message": auth.message,
100
+ },
101
+ body: JSON.stringify({ agentPubkey: agent_pubkey, jobId: job_id, score, comment }),
102
+ });
103
+ const buildData = (await buildRes.json());
104
+ if (!buildRes.ok || !buildData.transaction) {
105
+ return { content: [{ type: "text", text: `Build failed: ${buildData.error || "Unknown error"}` }] };
106
+ }
107
+ // Step 2: Sign with wallet keypair
108
+ const { Transaction } = await import("@solana/web3.js");
109
+ const txBytes = Buffer.from(buildData.transaction, "base64");
110
+ const tx = Transaction.from(txBytes);
111
+ tx.partialSign(keypair);
112
+ const signedBase64 = tx.serialize({ requireAllSignatures: false }).toString("base64");
113
+ // Step 3: Submit
114
+ const auth2 = signMessage(keypair, "feedback");
115
+ const submitRes = await fetch(`${baseUrl}/feedback/submit`, {
116
+ method: "POST",
117
+ headers: {
118
+ "Content-Type": "application/json",
119
+ "X-Wallet-Address": auth2.address,
120
+ "X-Wallet-Signature": auth2.signature,
121
+ "X-Wallet-Message": auth2.message,
122
+ },
123
+ body: JSON.stringify({
124
+ signedTransaction: signedBase64,
125
+ jobId: job_id,
126
+ agentPubkey: agent_pubkey,
127
+ score,
128
+ comment,
129
+ }),
130
+ });
131
+ const submitData = (await submitRes.json());
132
+ if (!submitRes.ok) {
133
+ return { content: [{ type: "text", text: `Submit failed: ${submitData.error || "Unknown error"}` }] };
134
+ }
135
+ return {
136
+ content: [
137
+ {
138
+ type: "text",
139
+ text: `**${score}-star review submitted on-chain!**\nAgent: ${agent_pubkey.slice(0, 8)}...\nJob: #${job_id}\nTx: ${submitData.txSignature}`,
140
+ },
141
+ ],
142
+ };
143
+ }
144
+ catch (err) {
145
+ return { content: [{ type: "text", text: `Review failed: ${err instanceof Error ? err.message : err}` }] };
146
+ }
147
+ });
148
+ server.tool("revoke_feedback", "Revoke a feedback you previously submitted for an agent. This is recorded on-chain.", {
149
+ agent_pubkey: z.string().min(32).max(44).describe("Agent pubkey"),
150
+ feedback_index: z.number().int().min(0).describe("Feedback index to revoke"),
151
+ }, async ({ agent_pubkey, feedback_index }) => {
152
+ try {
153
+ if (!walletExists()) {
154
+ return { content: [{ type: "text", text: "No wallet found. Use `setup_wallet` first." }] };
155
+ }
156
+ const keypair = loadWallet();
157
+ const auth = signMessage(keypair, "feedback");
158
+ const res = await fetch(`${api.getBaseUrl()}/agents/${agent_pubkey}/feedback/${feedback_index}/revoke`, {
159
+ method: "POST",
160
+ headers: {
161
+ "Content-Type": "application/json",
162
+ "X-Wallet-Address": auth.address,
163
+ "X-Wallet-Signature": auth.signature,
164
+ "X-Wallet-Message": auth.message,
165
+ },
166
+ });
167
+ const data = (await res.json());
168
+ if (!res.ok)
169
+ return { content: [{ type: "text", text: `Revoke failed: ${data.error}` }] };
170
+ return { content: [{ type: "text", text: `Feedback #${feedback_index} revoked successfully.` }] };
171
+ }
172
+ catch (err) {
173
+ return { content: [{ type: "text", text: `Failed: ${err instanceof Error ? err.message : err}` }] };
174
+ }
175
+ });
176
+ server.tool("respond_to_feedback", "Respond to a feedback left on your agent. Your response is recorded on-chain.", {
177
+ agent_pubkey: z.string().min(32).max(44).describe("Your agent's pubkey"),
178
+ feedback_index: z.number().int().min(0).describe("Feedback index to respond to"),
179
+ response: z.string().min(1).max(500).describe("Your response text"),
180
+ }, async ({ agent_pubkey, feedback_index, response }) => {
181
+ try {
182
+ if (!walletExists()) {
183
+ return { content: [{ type: "text", text: "No wallet found. Use `setup_wallet` first." }] };
184
+ }
185
+ const keypair = loadWallet();
186
+ const auth = signMessage(keypair, "feedback");
187
+ const res = await fetch(`${api.getBaseUrl()}/agents/${agent_pubkey}/feedback/${feedback_index}/respond`, {
188
+ method: "POST",
189
+ headers: {
190
+ "Content-Type": "application/json",
191
+ "X-Wallet-Address": auth.address,
192
+ "X-Wallet-Signature": auth.signature,
193
+ "X-Wallet-Message": auth.message,
194
+ },
195
+ body: JSON.stringify({ response }),
196
+ });
197
+ const data = (await res.json());
198
+ if (!res.ok)
199
+ return { content: [{ type: "text", text: `Response failed: ${data.error}` }] };
200
+ return { content: [{ type: "text", text: `Response to feedback #${feedback_index} submitted.` }] };
201
+ }
202
+ catch (err) {
203
+ return { content: [{ type: "text", text: `Failed: ${err instanceof Error ? err.message : err}` }] };
204
+ }
205
+ });
206
+ }
207
+ //# sourceMappingURL=trust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust.js","sourceRoot":"","sources":["../../src/tools/trust.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerUploadTools(server: McpServer): void;
@@ -0,0 +1,58 @@
1
+ import { z } from "zod";
2
+ import * as fs from "fs";
3
+ import * as path from "path";
4
+ import { walletExists, loadWallet, signMessage } from "../wallet.js";
5
+ import { api } from "../api.js";
6
+ export function registerUploadTools(server) {
7
+ server.tool("upload_file", "Upload a file to AgentBazaar storage. Returns a signed URL (1-hour expiry) that can be passed to hire_agent or send_message.", {
8
+ file_path: z.string().min(1).describe("Absolute or relative path to the file to upload"),
9
+ }, async ({ file_path: filePath }) => {
10
+ try {
11
+ if (!walletExists()) {
12
+ return { content: [{ type: "text", text: "No wallet found. Use `setup_wallet` first." }] };
13
+ }
14
+ const resolved = path.resolve(filePath);
15
+ if (!fs.existsSync(resolved)) {
16
+ return { content: [{ type: "text", text: `File not found: ${resolved}` }] };
17
+ }
18
+ const stat = fs.statSync(resolved);
19
+ if (stat.size > 100 * 1024 * 1024) {
20
+ return { content: [{ type: "text", text: "File exceeds 100 MB limit." }] };
21
+ }
22
+ const keypair = loadWallet();
23
+ const auth = signMessage(keypair, "upload");
24
+ const baseUrl = api.getBaseUrl();
25
+ const buffer = fs.readFileSync(resolved);
26
+ const fileName = path.basename(resolved);
27
+ const formData = new FormData();
28
+ formData.append("file", new Blob([buffer]), fileName);
29
+ const res = await fetch(`${baseUrl}/upload`, {
30
+ method: "POST",
31
+ headers: {
32
+ "X-Wallet-Address": auth.address,
33
+ "X-Wallet-Signature": auth.signature,
34
+ "X-Wallet-Message": auth.message,
35
+ },
36
+ body: formData,
37
+ });
38
+ const data = (await res.json());
39
+ if (!res.ok) {
40
+ return { content: [{ type: "text", text: `Upload failed: ${data.error || `HTTP ${res.status}`}` }] };
41
+ }
42
+ const sizeMb = (data.size / (1024 * 1024)).toFixed(2);
43
+ const lines = [
44
+ `**Uploaded:** ${data.name}`,
45
+ `**Type:** ${data.mimeType}`,
46
+ `**Size:** ${sizeMb} MB`,
47
+ `**URL:** ${data.url}`,
48
+ ``,
49
+ `Use this URL with \`hire_agent\` or \`send_message\` via the \`file_url\` parameter.`,
50
+ ];
51
+ return { content: [{ type: "text", text: lines.join("\n") }] };
52
+ }
53
+ catch (err) {
54
+ return { content: [{ type: "text", text: `Upload failed: ${err instanceof Error ? err.message : err}` }] };
55
+ }
56
+ });
57
+ }
58
+ //# sourceMappingURL=upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/tools/upload.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { z } from "zod";
2
2
  import { Connection, PublicKey } from "@solana/web3.js";
3
3
  import { TOKEN_PROGRAM_ID } from "@solana/spl-token";
4
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";
5
+ const SOLANA_RPC = process.env.SOLANA_RPC_URL || "https://api.mainnet-beta.solana.com";
6
6
  const USDC_MINT = process.env.SOLANA_CLUSTER === "mainnet-beta"
7
7
  ? "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
8
8
  : "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU";