@bloomfilter/mcp-server 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.
Files changed (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +114 -0
  3. package/dist/client.d.ts +40 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +297 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/index.d.ts +17 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +166 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/tools/account.d.ts +10 -0
  12. package/dist/tools/account.d.ts.map +1 -0
  13. package/dist/tools/account.js +31 -0
  14. package/dist/tools/account.js.map +1 -0
  15. package/dist/tools/dns.d.ts +37 -0
  16. package/dist/tools/dns.d.ts.map +1 -0
  17. package/dist/tools/dns.js +131 -0
  18. package/dist/tools/dns.js.map +1 -0
  19. package/dist/tools/domain-info.d.ts +12 -0
  20. package/dist/tools/domain-info.d.ts.map +1 -0
  21. package/dist/tools/domain-info.js +32 -0
  22. package/dist/tools/domain-info.js.map +1 -0
  23. package/dist/tools/pricing.d.ts +12 -0
  24. package/dist/tools/pricing.d.ts.map +1 -0
  25. package/dist/tools/pricing.js +46 -0
  26. package/dist/tools/pricing.js.map +1 -0
  27. package/dist/tools/register.d.ts +16 -0
  28. package/dist/tools/register.d.ts.map +1 -0
  29. package/dist/tools/register.js +59 -0
  30. package/dist/tools/register.js.map +1 -0
  31. package/dist/tools/renew.d.ts +16 -0
  32. package/dist/tools/renew.d.ts.map +1 -0
  33. package/dist/tools/renew.js +45 -0
  34. package/dist/tools/renew.js.map +1 -0
  35. package/dist/tools/search.d.ts +13 -0
  36. package/dist/tools/search.d.ts.map +1 -0
  37. package/dist/tools/search.js +37 -0
  38. package/dist/tools/search.js.map +1 -0
  39. package/dist/types.d.ts +145 -0
  40. package/dist/types.d.ts.map +1 -0
  41. package/dist/types.js +28 -0
  42. package/dist/types.js.map +1 -0
  43. package/package.json +36 -0
package/dist/index.js ADDED
@@ -0,0 +1,166 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @bloomfilter/mcp-server
4
+ *
5
+ * MCP server for Bloomfilter — enables AI agents to register ICANN domain
6
+ * names, manage DNS records, and check pricing via the Model Context Protocol.
7
+ *
8
+ * Usage:
9
+ * BLOOMFILTER_PRIVATE_KEY=0x... npx @bloomfilter/mcp-server
10
+ *
11
+ * Environment variables:
12
+ * BLOOMFILTER_API_URL — API base URL (default: https://api.bloomfilter.xyz)
13
+ * BLOOMFILTER_PRIVATE_KEY — EVM private key for payments + auth (optional for free tools)
14
+ * BLOOMFILTER_NETWORK — x402 network (default: eip155:8453)
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 { createBloomfilterClient } from "./client.js";
20
+ import { DNS_RECORD_TYPES } from "./types.js";
21
+ // Tool handlers
22
+ import { searchDomains } from "./tools/search.js";
23
+ import { getPricing } from "./tools/pricing.js";
24
+ import { getDomainInfo } from "./tools/domain-info.js";
25
+ import { registerDomain } from "./tools/register.js";
26
+ import { renewDomain } from "./tools/renew.js";
27
+ import { listDnsRecords, addDnsRecord, updateDnsRecord, deleteDnsRecord } from "./tools/dns.js";
28
+ import { getAccount } from "./tools/account.js";
29
+ // ── Configuration ───────────────────────────────────────────────────────────
30
+ function loadConfig() {
31
+ const apiUrl = process.env.BLOOMFILTER_API_URL ?? "https://api.bloomfilter.xyz";
32
+ const network = process.env.BLOOMFILTER_NETWORK ?? "eip155:8453";
33
+ let privateKey;
34
+ if (process.env.BLOOMFILTER_PRIVATE_KEY) {
35
+ const key = process.env.BLOOMFILTER_PRIVATE_KEY;
36
+ privateKey = (key.startsWith("0x") ? key : `0x${key}`);
37
+ }
38
+ return { apiUrl, privateKey, network };
39
+ }
40
+ // ── Main ────────────────────────────────────────────────────────────────────
41
+ async function main() {
42
+ const config = loadConfig();
43
+ console.error("[bloomfilter-mcp] Starting Bloomfilter MCP server v0.1.0");
44
+ console.error(`[bloomfilter-mcp] API: ${config.apiUrl}`);
45
+ console.error(`[bloomfilter-mcp] Network: ${config.network}`);
46
+ if (!config.privateKey) {
47
+ console.error("[bloomfilter-mcp] Warning: No BLOOMFILTER_PRIVATE_KEY set. " +
48
+ "Only free tools (search, pricing) will work. " +
49
+ "Set BLOOMFILTER_PRIVATE_KEY to enable registration, renewal, DNS, and account tools.");
50
+ }
51
+ // Create the API client
52
+ const client = await createBloomfilterClient(config);
53
+ // Create the MCP server
54
+ const server = new McpServer({
55
+ name: "bloomfilter",
56
+ version: "0.1.0",
57
+ });
58
+ // ── Register Tools ──────────────────────────────────────────────────────
59
+ // 1. search_domains
60
+ server.tool("search_domains", "Search for available domain names. Returns availability and pricing for each TLD.", {
61
+ query: z.string().describe("Domain name to search for (e.g., 'myproject', 'coolstartup')"),
62
+ tlds: z
63
+ .string()
64
+ .optional()
65
+ .describe("Comma-separated TLDs to check (e.g., 'com,io,xyz'). Defaults to com,net,org,io,xyz"),
66
+ }, async (params) => searchDomains(client, params));
67
+ // 2. get_pricing
68
+ server.tool("get_pricing", "Get domain registration, renewal, and transfer pricing. Omit tld for all TLDs, or specify one.", {
69
+ tld: z
70
+ .string()
71
+ .optional()
72
+ .describe("Specific TLD to get pricing for (e.g., 'com', 'io'). Omit for all TLDs."),
73
+ }, async (params) => getPricing(client, params));
74
+ // 3. get_domain_info
75
+ server.tool("get_domain_info", "Get detailed information about a registered domain (status, expiry, nameservers, etc.).", {
76
+ domain: z.string().describe("Fully qualified domain name (e.g., 'example.com')"),
77
+ }, async (params) => getDomainInfo(client, params));
78
+ // 4. register_domain
79
+ server.tool("register_domain", "Register a new domain name. Requires USDC payment via x402. Handles async provisioning automatically.", {
80
+ domain: z.string().describe("Domain to register (e.g., 'myproject.com')"),
81
+ years: z
82
+ .number()
83
+ .int()
84
+ .min(1)
85
+ .max(10)
86
+ .optional()
87
+ .describe("Registration period in years (1-10, default: 1)"),
88
+ }, async (params) => registerDomain(client, params));
89
+ // 5. renew_domain
90
+ server.tool("renew_domain", "Renew an existing domain registration. Requires USDC payment via x402.", {
91
+ domain: z.string().describe("Domain to renew (e.g., 'myproject.com')"),
92
+ years: z
93
+ .number()
94
+ .int()
95
+ .min(1)
96
+ .max(10)
97
+ .optional()
98
+ .describe("Renewal period in years (1-10, default: 1)"),
99
+ }, async (params) => renewDomain(client, params));
100
+ // 6. list_dns_records
101
+ server.tool("list_dns_records", "List all DNS records for a domain you own.", {
102
+ domain: z.string().describe("Domain to list DNS records for (e.g., 'myproject.com')"),
103
+ }, async (params) => listDnsRecords(client, params));
104
+ // 7. add_dns_record
105
+ server.tool("add_dns_record", "Add a DNS record to a domain you own. Costs $0.10 USDC per record.", {
106
+ domain: z.string().describe("Domain to add the record to (e.g., 'myproject.com')"),
107
+ type: z
108
+ .enum(DNS_RECORD_TYPES)
109
+ .describe("DNS record type (A, AAAA, CNAME, MX, TXT, NS, SRV, CAA, FORWARD)"),
110
+ host: z.string().describe("Record hostname (e.g., '@' for root, 'www', 'mail')"),
111
+ value: z.string().describe("Record value (e.g., IP address, CNAME target, MX server)"),
112
+ ttl: z
113
+ .number()
114
+ .int()
115
+ .min(300)
116
+ .max(86400)
117
+ .optional()
118
+ .describe("Time-to-live in seconds (300-86400, default: 3600)"),
119
+ distance: z
120
+ .number()
121
+ .int()
122
+ .min(0)
123
+ .optional()
124
+ .describe("MX priority / SRV weight (only for MX and SRV records)"),
125
+ }, async (params) => addDnsRecord(client, params));
126
+ // 8. update_dns_record
127
+ server.tool("update_dns_record", "Update an existing DNS record. Costs $0.10 USDC. Use list_dns_records to find the record_id.", {
128
+ domain: z.string().describe("Domain the record belongs to (e.g., 'myproject.com')"),
129
+ record_id: z.string().describe("ID of the DNS record to update (from list_dns_records)"),
130
+ host: z.string().describe("New hostname for the record"),
131
+ value: z.string().describe("New value for the record"),
132
+ ttl: z
133
+ .number()
134
+ .int()
135
+ .min(300)
136
+ .max(86400)
137
+ .optional()
138
+ .describe("New TTL in seconds (300-86400)"),
139
+ distance: z.number().int().min(0).optional().describe("New MX priority / SRV weight"),
140
+ }, async (params) => updateDnsRecord(client, params));
141
+ // 9. delete_dns_record
142
+ server.tool("delete_dns_record", "Delete a DNS record from a domain you own. Costs $0.10 USDC.", {
143
+ domain: z.string().describe("Domain the record belongs to (e.g., 'myproject.com')"),
144
+ record_id: z.string().describe("ID of the DNS record to delete (from list_dns_records)"),
145
+ }, async (params) => deleteDnsRecord(client, params));
146
+ // 10. get_account
147
+ server.tool("get_account", "Get account information — wallet address, domain count, total spent.", {}, async () => getAccount(client));
148
+ // ── Start Server ────────────────────────────────────────────────────────
149
+ const transport = new StdioServerTransport();
150
+ await server.connect(transport);
151
+ console.error("[bloomfilter-mcp] Server started, waiting for requests...");
152
+ }
153
+ // ── Error Handling ────────────────────────────────────────────────────────
154
+ main().catch((error) => {
155
+ console.error("[bloomfilter-mcp] Fatal error:", error);
156
+ process.exit(1);
157
+ });
158
+ process.on("SIGINT", () => {
159
+ console.error("[bloomfilter-mcp] Shutting down...");
160
+ process.exit(0);
161
+ });
162
+ process.on("SIGTERM", () => {
163
+ console.error("[bloomfilter-mcp] Shutting down...");
164
+ process.exit(0);
165
+ });
166
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * get_account tool — Get account information for the authenticated wallet.
3
+ *
4
+ * Calls GET /account
5
+ * Requires authentication (JWT).
6
+ */
7
+ import type { BloomfilterClient } from "../client.js";
8
+ import type { McpToolResult } from "../types.js";
9
+ export declare function getAccount(client: BloomfilterClient): Promise<McpToolResult>;
10
+ //# sourceMappingURL=account.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/tools/account.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,aAAa,CAAC;AAElE,wBAAsB,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAwBlF"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * get_account tool — Get account information for the authenticated wallet.
3
+ *
4
+ * Calls GET /account
5
+ * Requires authentication (JWT).
6
+ */
7
+ import { formatToolError } from "../client.js";
8
+ export async function getAccount(client) {
9
+ const keyError = client.requiresPrivateKey();
10
+ if (keyError)
11
+ return keyError;
12
+ try {
13
+ await client.ensureAuth();
14
+ const { data } = await client.http.get("/account", {
15
+ headers: client.getAuthHeaders(),
16
+ });
17
+ const text = [
18
+ "Account Information:",
19
+ ` Wallet: ${data.wallet_address}`,
20
+ ` Domains: ${data.domains_registered}`,
21
+ ` Total Spent: $${(data.total_spent_cents / 100).toFixed(2)}`,
22
+ ` Member Since: ${data.created_at}`,
23
+ ` Last Active: ${data.last_active_at}`,
24
+ ].join("\n");
25
+ return { content: [{ type: "text", text }] };
26
+ }
27
+ catch (error) {
28
+ return formatToolError(error);
29
+ }
30
+ }
31
+ //# sourceMappingURL=account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/tools/account.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAyB;IACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;IAC7C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAE1B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,CAAkB,UAAU,EAAE;YAClE,OAAO,EAAE,MAAM,CAAC,cAAc,EAAE;SACjC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG;YACX,sBAAsB;YACtB,aAAa,IAAI,CAAC,cAAc,EAAE;YAClC,cAAc,IAAI,CAAC,kBAAkB,EAAE;YACvC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAC9D,mBAAmB,IAAI,CAAC,UAAU,EAAE;YACpC,kBAAkB,IAAI,CAAC,cAAc,EAAE;SACxC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * DNS management tools — list, add, update, and delete DNS records.
3
+ *
4
+ * list_dns_records: GET /dns/:domain
5
+ * add_dns_record: POST /dns/:domain (x402 $0.10)
6
+ * update_dns_record: PUT /dns/:domain/:id (x402 $0.10)
7
+ * delete_dns_record: DELETE /dns/:domain/:id (x402 $0.10)
8
+ *
9
+ * All require authentication (JWT).
10
+ * Mutations require x402 payment ($0.10 USDC each).
11
+ */
12
+ import type { BloomfilterClient } from "../client.js";
13
+ import type { McpToolResult } from "../types.js";
14
+ export declare function listDnsRecords(client: BloomfilterClient, params: {
15
+ domain: string;
16
+ }): Promise<McpToolResult>;
17
+ export declare function addDnsRecord(client: BloomfilterClient, params: {
18
+ domain: string;
19
+ type: string;
20
+ host: string;
21
+ value: string;
22
+ ttl?: number;
23
+ distance?: number;
24
+ }): Promise<McpToolResult>;
25
+ export declare function updateDnsRecord(client: BloomfilterClient, params: {
26
+ domain: string;
27
+ record_id: string;
28
+ host: string;
29
+ value: string;
30
+ ttl?: number;
31
+ distance?: number;
32
+ }): Promise<McpToolResult>;
33
+ export declare function deleteDnsRecord(client: BloomfilterClient, params: {
34
+ domain: string;
35
+ record_id: string;
36
+ }): Promise<McpToolResult>;
37
+ //# sourceMappingURL=dns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dns.d.ts","sourceRoot":"","sources":["../../src/tools/dns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAqB,MAAM,aAAa,CAAC;AAIpE,wBAAsB,cAAc,CAClC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GACzB,OAAO,CAAC,aAAa,CAAC,CAuCxB;AAID,wBAAsB,YAAY,CAChC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE;IACN,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,aAAa,CAAC,CAqCxB;AAID,wBAAsB,eAAe,CACnC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE;IACN,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,aAAa,CAAC,CAkCxB;AAID,wBAAsB,eAAe,CACnC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC5C,OAAO,CAAC,aAAa,CAAC,CAuBxB"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * DNS management tools — list, add, update, and delete DNS records.
3
+ *
4
+ * list_dns_records: GET /dns/:domain
5
+ * add_dns_record: POST /dns/:domain (x402 $0.10)
6
+ * update_dns_record: PUT /dns/:domain/:id (x402 $0.10)
7
+ * delete_dns_record: DELETE /dns/:domain/:id (x402 $0.10)
8
+ *
9
+ * All require authentication (JWT).
10
+ * Mutations require x402 payment ($0.10 USDC each).
11
+ */
12
+ import { formatToolError } from "../client.js";
13
+ // ── List DNS Records ────────────────────────────────────────────────────────
14
+ export async function listDnsRecords(client, params) {
15
+ const keyError = client.requiresPrivateKey();
16
+ if (keyError)
17
+ return keyError;
18
+ try {
19
+ await client.ensureAuth();
20
+ const { data } = await client.http.get(`/dns/${encodeURIComponent(params.domain)}`, { headers: client.getAuthHeaders() });
21
+ const records = data.records ?? [];
22
+ if (records.length === 0) {
23
+ return {
24
+ content: [{ type: "text", text: `No DNS records found for ${params.domain}.` }],
25
+ };
26
+ }
27
+ const header = "ID Type Host Value TTL";
28
+ const divider = "\u2500".repeat(header.length);
29
+ const rows = records.map((r) => {
30
+ const id = r.recordId.padEnd(15);
31
+ const type = r.type.padEnd(8);
32
+ const host = r.host.substring(0, 20).padEnd(21);
33
+ const value = r.value.substring(0, 30).padEnd(31);
34
+ const ttl = String(r.ttl);
35
+ const distance = r.distance != null ? ` (priority: ${r.distance})` : "";
36
+ return `${id}${type}${host}${value}${ttl}${distance}`;
37
+ });
38
+ const text = `DNS records for ${params.domain}:\n\n${header}\n${divider}\n${rows.join("\n")}`;
39
+ return { content: [{ type: "text", text }] };
40
+ }
41
+ catch (error) {
42
+ return formatToolError(error);
43
+ }
44
+ }
45
+ // ── Add DNS Record ──────────────────────────────────────────────────────────
46
+ export async function addDnsRecord(client, params) {
47
+ const keyError = client.requiresPrivateKey();
48
+ if (keyError)
49
+ return keyError;
50
+ try {
51
+ await client.ensureAuth();
52
+ const body = {
53
+ type: params.type,
54
+ host: params.host,
55
+ value: params.value,
56
+ };
57
+ if (params.ttl != null)
58
+ body.ttl = params.ttl;
59
+ if (params.distance != null)
60
+ body.distance = params.distance;
61
+ const { data } = await client.http.post(`/dns/${encodeURIComponent(params.domain)}`, body, { headers: client.getAuthHeaders() });
62
+ const text = [
63
+ `DNS record added to ${params.domain}:`,
64
+ ` Record ID: ${data.recordId}`,
65
+ ` Type: ${data.type}`,
66
+ ` Host: ${data.host}`,
67
+ ` Value: ${data.value}`,
68
+ ` TTL: ${data.ttl}`,
69
+ data.distance != null ? ` Priority: ${data.distance}` : null,
70
+ ]
71
+ .filter(Boolean)
72
+ .join("\n");
73
+ return { content: [{ type: "text", text }] };
74
+ }
75
+ catch (error) {
76
+ return formatToolError(error);
77
+ }
78
+ }
79
+ // ── Update DNS Record ───────────────────────────────────────────────────────
80
+ export async function updateDnsRecord(client, params) {
81
+ const keyError = client.requiresPrivateKey();
82
+ if (keyError)
83
+ return keyError;
84
+ try {
85
+ await client.ensureAuth();
86
+ const body = {
87
+ host: params.host,
88
+ value: params.value,
89
+ };
90
+ if (params.ttl != null)
91
+ body.ttl = params.ttl;
92
+ if (params.distance != null)
93
+ body.distance = params.distance;
94
+ await client.http.put(`/dns/${encodeURIComponent(params.domain)}/${encodeURIComponent(params.record_id)}`, body, { headers: client.getAuthHeaders() });
95
+ const text = [
96
+ `DNS record updated for ${params.domain}:`,
97
+ ` Host: ${params.host}`,
98
+ ` Value: ${params.value}`,
99
+ params.ttl != null ? ` TTL: ${params.ttl}` : null,
100
+ params.distance != null ? ` Priority: ${params.distance}` : null,
101
+ ]
102
+ .filter(Boolean)
103
+ .join("\n");
104
+ return { content: [{ type: "text", text }] };
105
+ }
106
+ catch (error) {
107
+ return formatToolError(error);
108
+ }
109
+ }
110
+ // ── Delete DNS Record ───────────────────────────────────────────────────────
111
+ export async function deleteDnsRecord(client, params) {
112
+ const keyError = client.requiresPrivateKey();
113
+ if (keyError)
114
+ return keyError;
115
+ try {
116
+ await client.ensureAuth();
117
+ await client.http.delete(`/dns/${encodeURIComponent(params.domain)}/${encodeURIComponent(params.record_id)}`, { headers: client.getAuthHeaders() });
118
+ return {
119
+ content: [
120
+ {
121
+ type: "text",
122
+ text: `DNS record ${params.record_id} deleted from ${params.domain}.`,
123
+ },
124
+ ],
125
+ };
126
+ }
127
+ catch (error) {
128
+ return formatToolError(error);
129
+ }
130
+ }
131
+ //# sourceMappingURL=dns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dns.js","sourceRoot":"","sources":["../../src/tools/dns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * get_domain_info tool — Get detailed information about a registered domain.
3
+ *
4
+ * Calls GET /domains/:domain
5
+ * Requires authentication (JWT).
6
+ */
7
+ import type { BloomfilterClient } from "../client.js";
8
+ import type { McpToolResult } from "../types.js";
9
+ export declare function getDomainInfo(client: BloomfilterClient, params: {
10
+ domain: string;
11
+ }): Promise<McpToolResult>;
12
+ //# sourceMappingURL=domain-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-info.d.ts","sourceRoot":"","sources":["../../src/tools/domain-info.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,aAAa,CAAC;AAErE,wBAAsB,aAAa,CACjC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GACzB,OAAO,CAAC,aAAa,CAAC,CA6BxB"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * get_domain_info tool — Get detailed information about a registered domain.
3
+ *
4
+ * Calls GET /domains/:domain
5
+ * Requires authentication (JWT).
6
+ */
7
+ import { formatToolError } from "../client.js";
8
+ export async function getDomainInfo(client, params) {
9
+ const keyError = client.requiresPrivateKey();
10
+ if (keyError)
11
+ return keyError;
12
+ try {
13
+ await client.ensureAuth();
14
+ const { data } = await client.http.get(`/domains/${encodeURIComponent(params.domain)}`, { headers: client.getAuthHeaders() });
15
+ const nameservers = data.nameservers?.length ? data.nameservers.join(", ") : "none";
16
+ const text = [
17
+ `Domain: ${data.domain}`,
18
+ `Status: ${data.status}`,
19
+ `Created: ${data.registeredAt}`,
20
+ `Expires: ${data.expiresAt}`,
21
+ `Auto-Renew: ${data.autoRenew ? "Yes" : "No"}`,
22
+ `Locked: ${data.locked ? "Yes" : "No"}`,
23
+ `Nameservers: ${nameservers}`,
24
+ `Owner: ${data.walletAddress}`,
25
+ ].join("\n");
26
+ return { content: [{ type: "text", text }] };
27
+ }
28
+ catch (error) {
29
+ return formatToolError(error);
30
+ }
31
+ }
32
+ //# sourceMappingURL=domain-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-info.js","sourceRoot":"","sources":["../../src/tools/domain-info.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAyB,EACzB,MAA0B;IAE1B,MAAM,QAAQ,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;IAC7C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAE1B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,CACpC,YAAY,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAC/C,EAAE,OAAO,EAAE,MAAM,CAAC,cAAc,EAAE,EAAE,CACrC,CAAC;QAEF,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAEpF,MAAM,IAAI,GAAG;YACX,WAAW,IAAI,CAAC,MAAM,EAAE;YACxB,WAAW,IAAI,CAAC,MAAM,EAAE;YACxB,YAAY,IAAI,CAAC,YAAY,EAAE;YAC/B,YAAY,IAAI,CAAC,SAAS,EAAE;YAC5B,eAAe,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;YAC9C,WAAW,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;YACvC,gBAAgB,WAAW,EAAE;YAC7B,UAAU,IAAI,CAAC,aAAa,EAAE;SAC/B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * get_pricing tool — Get domain pricing for one or all TLDs.
3
+ *
4
+ * Calls GET /domains/pricing or GET /domains/pricing/:tld
5
+ * No authentication or payment required.
6
+ */
7
+ import type { BloomfilterClient } from "../client.js";
8
+ import type { McpToolResult } from "../types.js";
9
+ export declare function getPricing(client: BloomfilterClient, params: {
10
+ tld?: string;
11
+ }): Promise<McpToolResult>;
12
+ //# sourceMappingURL=pricing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/tools/pricing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,aAAa,CAAC;AAE7D,wBAAsB,UAAU,CAC9B,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACvB,OAAO,CAAC,aAAa,CAAC,CA6CxB"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * get_pricing tool — Get domain pricing for one or all TLDs.
3
+ *
4
+ * Calls GET /domains/pricing or GET /domains/pricing/:tld
5
+ * No authentication or payment required.
6
+ */
7
+ import { formatToolError } from "../client.js";
8
+ export async function getPricing(client, params) {
9
+ try {
10
+ const url = params.tld
11
+ ? `/domains/pricing/${encodeURIComponent(params.tld)}`
12
+ : "/domains/pricing";
13
+ const { data } = await client.http.get(url);
14
+ // Single TLD
15
+ if (params.tld) {
16
+ const p = data;
17
+ const text = [
18
+ `Pricing for .${p.tld}:`,
19
+ ` Registration: $${p.registration_price_usd}`,
20
+ ` Renewal: $${p.renewal_price_usd}`,
21
+ ` Transfer: $${p.transfer_price_usd}`,
22
+ ].join("\n");
23
+ return { content: [{ type: "text", text }] };
24
+ }
25
+ // All TLDs
26
+ const pricing = (Array.isArray(data) ? data : (data.pricing ?? []));
27
+ if (pricing.length === 0) {
28
+ return { content: [{ type: "text", text: "No pricing data available." }] };
29
+ }
30
+ const header = "TLD Registration Renewal Transfer";
31
+ const divider = "\u2500".repeat(header.length);
32
+ const rows = pricing.map((p) => {
33
+ const tld = `.${p.tld}`.padEnd(11);
34
+ const reg = `$${p.registration_price_usd}`.padEnd(15);
35
+ const renew = `$${p.renewal_price_usd}`.padEnd(15);
36
+ const transfer = `$${p.transfer_price_usd}`;
37
+ return `${tld}${reg}${renew}${transfer}`;
38
+ });
39
+ const text = `Domain Pricing:\n\n${header}\n${divider}\n${rows.join("\n")}`;
40
+ return { content: [{ type: "text", text }] };
41
+ }
42
+ catch (error) {
43
+ return formatToolError(error);
44
+ }
45
+ }
46
+ //# sourceMappingURL=pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/tools/pricing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAyB,EACzB,MAAwB;IAExB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG;YACpB,CAAC,CAAC,oBAAoB,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACtD,CAAC,CAAC,kBAAkB,CAAC;QAEvB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE5C,aAAa;QACb,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YACf,MAAM,CAAC,GAAG,IAAkB,CAAC;YAC7B,MAAM,IAAI,GAAG;gBACX,gBAAgB,CAAC,CAAC,GAAG,GAAG;gBACxB,oBAAoB,CAAC,CAAC,sBAAsB,EAAE;gBAC9C,oBAAoB,CAAC,CAAC,iBAAiB,EAAE;gBACzC,oBAAoB,CAAC,CAAC,kBAAkB,EAAE;aAC3C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/C,CAAC;QAED,WAAW;QACX,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAiB,CAAC;QAEpF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,EAAE,CAAC,EAAE,CAAC;QAC7E,CAAC;QAED,MAAM,MAAM,GAAG,mDAAmD,CAAC;QACnE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE/C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,sBAAsB,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACtD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,kBAAkB,EAAE,CAAC;YAC5C,OAAO,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,QAAQ,EAAE,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,sBAAsB,MAAM,KAAK,OAAO,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAE5E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * register_domain tool — Register a new domain name.
3
+ *
4
+ * Calls POST /domains/register with x402 payment.
5
+ * Handles both synchronous (201) and asynchronous (202) responses.
6
+ * On 202, polls the job status until completion or failure.
7
+ *
8
+ * Requires authentication (JWT) and payment (x402 USDC).
9
+ */
10
+ import type { BloomfilterClient } from "../client.js";
11
+ import type { McpToolResult } from "../types.js";
12
+ export declare function registerDomain(client: BloomfilterClient, params: {
13
+ domain: string;
14
+ years?: number;
15
+ }): Promise<McpToolResult>;
16
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAwB,MAAM,aAAa,CAAC;AAEvE,wBAAsB,cAAc,CAClC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACzC,OAAO,CAAC,aAAa,CAAC,CAyDxB"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * register_domain tool — Register a new domain name.
3
+ *
4
+ * Calls POST /domains/register with x402 payment.
5
+ * Handles both synchronous (201) and asynchronous (202) responses.
6
+ * On 202, polls the job status until completion or failure.
7
+ *
8
+ * Requires authentication (JWT) and payment (x402 USDC).
9
+ */
10
+ import { formatToolError } from "../client.js";
11
+ export async function registerDomain(client, params) {
12
+ const keyError = client.requiresPrivateKey();
13
+ if (keyError)
14
+ return keyError;
15
+ try {
16
+ await client.ensureAuth();
17
+ const response = await client.http.post("/domains/register", { domain: params.domain, years: params.years ?? 1 }, { headers: client.getAuthHeaders() });
18
+ let result = response.data;
19
+ // Async provisioning — poll until complete
20
+ if (response.status === 202 && result.jobId) {
21
+ console.error(`[bloomfilter-mcp] Registration queued (job ${result.jobId}), polling...`);
22
+ const jobResult = await client.pollJobStatus(result.jobId);
23
+ if (jobResult.result) {
24
+ result = jobResult.result;
25
+ }
26
+ }
27
+ // Format the result
28
+ const lines = [`Domain registered: ${result.domain}`, `Status: ${result.status}`];
29
+ if (result.expiresAt) {
30
+ lines.push(`Expires: ${result.expiresAt}`);
31
+ }
32
+ if (result.payment) {
33
+ lines.push(`Cost: $${result.payment.amountUsd}`);
34
+ if (result.payment.txHash) {
35
+ lines.push(`Transaction: ${result.payment.txHash}`);
36
+ }
37
+ lines.push(`Network: ${result.payment.network}`);
38
+ }
39
+ if (result.dnsRecords && result.dnsRecords.length > 0) {
40
+ lines.push("");
41
+ lines.push("DNS Records:");
42
+ for (const record of result.dnsRecords) {
43
+ lines.push(` ${record.type} ${record.host} \u2192 ${record.value}`);
44
+ }
45
+ }
46
+ if (result.warnings && result.warnings.length > 0) {
47
+ lines.push("");
48
+ lines.push("Warnings:");
49
+ for (const warning of result.warnings) {
50
+ lines.push(` \u26a0 ${warning}`);
51
+ }
52
+ }
53
+ return { content: [{ type: "text", text: lines.join("\n") }] };
54
+ }
55
+ catch (error) {
56
+ return formatToolError(error);
57
+ }
58
+ }
59
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"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"}