@robotdomainsearch/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 ADDED
@@ -0,0 +1,95 @@
1
+ # @robotdomainsearch/mcp
2
+
3
+ [RobotDomainSearch](https://robotdomainsearch.com) MCP Server — domain intelligence for AI agents.
4
+
5
+ A [Model Context Protocol](https://modelcontextprotocol.io) server that gives AI applications (Claude Desktop, Cursor, Windsurf, etc.) access to domain name tools: availability checks, WHOIS lookups, DNS intelligence, aftermarket listings, ENS resolution, and more.
6
+
7
+ ## Quick Start
8
+
9
+ ### Claude Desktop
10
+
11
+ Add to your `claude_desktop_config.json`:
12
+
13
+ ```json
14
+ {
15
+ "mcpServers": {
16
+ "robotdomainsearch": {
17
+ "command": "npx",
18
+ "args": ["-y", "@robotdomainsearch/mcp"]
19
+ }
20
+ }
21
+ }
22
+ ```
23
+
24
+ ### Cursor
25
+
26
+ Add to your Cursor MCP settings:
27
+
28
+ ```json
29
+ {
30
+ "mcpServers": {
31
+ "robotdomainsearch": {
32
+ "command": "npx",
33
+ "args": ["-y", "@robotdomainsearch/mcp"]
34
+ }
35
+ }
36
+ }
37
+ ```
38
+
39
+ ### Global Install
40
+
41
+ ```bash
42
+ npm install -g @robotdomainsearch/mcp
43
+ ```
44
+
45
+ Then run directly:
46
+
47
+ ```bash
48
+ robotdomainsearch-mcp
49
+ ```
50
+
51
+ ## Available Tools
52
+
53
+ | Tool | Description |
54
+ |------|-------------|
55
+ | `check_domain` | Check domain name availability via RDAP |
56
+ | `whois_lookup` | Full WHOIS/RDAP information for a domain |
57
+ | `domain_intel` | Comprehensive domain intelligence report |
58
+ | `search_aftermarket` | Search aftermarket domain listings |
59
+ | `search_auctions` | Search live domain auctions |
60
+ | `resolve_ens` | Resolve ENS (.eth) names to addresses |
61
+ | `list_tlds` | Browse available TLDs by category |
62
+ | `check_presence` | Check name availability across platforms |
63
+
64
+ ## How It Works
65
+
66
+ This npm package wraps a prebuilt Go binary. During `npm install`, the correct binary for your platform is downloaded from [GitHub Releases](https://github.com/erickuhn19/RobotDomainSearch-API/releases).
67
+
68
+ ### Supported Platforms
69
+
70
+ | OS | Architecture |
71
+ |----|-------------|
72
+ | macOS | Apple Silicon (arm64) |
73
+ | macOS | Intel (x64) |
74
+ | Linux | arm64 |
75
+ | Linux | x64 |
76
+
77
+ ## Configuration
78
+
79
+ The MCP server connects to the public RobotDomainSearch API by default. No API key required.
80
+
81
+ | Environment Variable | Default | Description |
82
+ |---------------------|---------|-------------|
83
+ | `RDS_API_URL` | `https://api.robotdomainsearch.com` | API base URL |
84
+ | `RDS_ENS_URL` | `https://ens.robotdomainsearch.com` | ENS service URL |
85
+
86
+ ## Links
87
+
88
+ - **Website:** [robotdomainsearch.com](https://robotdomainsearch.com)
89
+ - **MCP Page:** [robotdomainsearch.com/mcp](https://robotdomainsearch.com/mcp/)
90
+ - **API Docs:** [robotdomainsearch.com/docs](https://robotdomainsearch.com/docs/)
91
+ - **GitHub:** [erickuhn19/RobotDomainSearch-API](https://github.com/erickuhn19/RobotDomainSearch-API)
92
+
93
+ ## License
94
+
95
+ MIT
package/bin/.gitkeep ADDED
File without changes
package/index.js ADDED
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env node
2
+
3
+ // Thin wrapper that spawns the Go-built MCP server binary.
4
+ // The binary is downloaded during `npm install` by install.js.
5
+
6
+ const { spawn } = require("child_process");
7
+ const path = require("path");
8
+ const fs = require("fs");
9
+
10
+ const binName =
11
+ process.platform === "win32"
12
+ ? "robotdomainsearch-mcp.exe"
13
+ : "robotdomainsearch-mcp";
14
+ const binPath = path.join(__dirname, "bin", binName);
15
+
16
+ if (!fs.existsSync(binPath)) {
17
+ console.error(
18
+ "Error: robotdomainsearch-mcp binary not found at",
19
+ binPath,
20
+ "\nRun `npm install` or `node install.js` to download it."
21
+ );
22
+ process.exit(1);
23
+ }
24
+
25
+ const child = spawn(binPath, process.argv.slice(2), {
26
+ stdio: "inherit",
27
+ env: process.env,
28
+ });
29
+
30
+ child.on("error", (err) => {
31
+ console.error("Failed to start robotdomainsearch-mcp:", err.message);
32
+ process.exit(1);
33
+ });
34
+
35
+ child.on("exit", (code, signal) => {
36
+ if (signal) {
37
+ // Remove our listeners so the re-raised signal triggers default
38
+ // termination behavior instead of re-entering the handler.
39
+ for (const s of ["SIGINT", "SIGTERM", "SIGHUP"]) {
40
+ process.removeAllListeners(s);
41
+ }
42
+ process.kill(process.pid, signal);
43
+ } else {
44
+ process.exit(code ?? 1);
45
+ }
46
+ });
47
+
48
+ // Forward termination signals to the child process
49
+ for (const sig of ["SIGINT", "SIGTERM", "SIGHUP"]) {
50
+ process.on(sig, () => child.kill(sig));
51
+ }
package/install.js ADDED
@@ -0,0 +1,115 @@
1
+ #!/usr/bin/env node
2
+
3
+ // postinstall script — downloads the correct platform-specific Go binary
4
+ // from GitHub Releases and places it in ./bin/
5
+
6
+ const https = require("https");
7
+ const fs = require("fs");
8
+ const path = require("path");
9
+ const { execSync } = require("child_process");
10
+
11
+ const REPO = "erickuhn19/RobotDomainSearch-API";
12
+ const BIN_DIR = path.join(__dirname, "bin");
13
+ const BIN_NAME = "robotdomainsearch-mcp";
14
+
15
+ // Map Node.js platform/arch to Go build target names
16
+ const PLATFORM_MAP = {
17
+ darwin: "darwin",
18
+ linux: "linux",
19
+ };
20
+
21
+ const ARCH_MAP = {
22
+ arm64: "arm64",
23
+ x64: "amd64",
24
+ };
25
+
26
+ function getPlatformKey() {
27
+ const platform = PLATFORM_MAP[process.platform];
28
+ const arch = ARCH_MAP[process.arch];
29
+
30
+ if (!platform || !arch) {
31
+ console.error(
32
+ `Unsupported platform: ${process.platform}/${process.arch}\n` +
33
+ "Supported: macOS (arm64, x64), Linux (arm64, x64)"
34
+ );
35
+ process.exit(1);
36
+ }
37
+
38
+ return `${platform}_${arch}`;
39
+ }
40
+
41
+ function getVersion() {
42
+ const pkg = JSON.parse(
43
+ fs.readFileSync(path.join(__dirname, "package.json"), "utf8")
44
+ );
45
+ return pkg.version;
46
+ }
47
+
48
+ function httpsGet(url) {
49
+ return new Promise((resolve, reject) => {
50
+ https
51
+ .get(url, { headers: { "User-Agent": "robotdomainsearch-mcp-npm" } }, (res) => {
52
+ // Follow redirects
53
+ if (res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
54
+ return httpsGet(res.headers.location).then(resolve, reject);
55
+ }
56
+ if (res.statusCode !== 200) {
57
+ reject(new Error(`HTTP ${res.statusCode} for ${url}`));
58
+ res.resume();
59
+ return;
60
+ }
61
+ const chunks = [];
62
+ res.on("data", (chunk) => chunks.push(chunk));
63
+ res.on("end", () => resolve(Buffer.concat(chunks)));
64
+ res.on("error", reject);
65
+ })
66
+ .on("error", reject);
67
+ });
68
+ }
69
+
70
+ async function main() {
71
+ const platformKey = getPlatformKey();
72
+ const version = getVersion();
73
+ const tag = `mcp-v${version}`;
74
+
75
+ // Binary archive name matches the GitHub Release asset pattern
76
+ const archiveName = `robotdomainsearch-mcp_${platformKey}.tar.gz`;
77
+ const downloadUrl = `https://github.com/${REPO}/releases/download/${tag}/${archiveName}`;
78
+
79
+ console.log(`Downloading ${BIN_NAME} ${version} for ${platformKey}...`);
80
+ console.log(`URL: ${downloadUrl}`);
81
+
82
+ // Ensure bin directory exists
83
+ fs.mkdirSync(BIN_DIR, { recursive: true });
84
+
85
+ const archivePath = path.join(BIN_DIR, archiveName);
86
+
87
+ try {
88
+ const data = await httpsGet(downloadUrl);
89
+ fs.writeFileSync(archivePath, data);
90
+
91
+ // Extract the binary from the tarball
92
+ execSync(`tar -xzf "${archiveName}" -C .`, { cwd: BIN_DIR });
93
+
94
+ // Clean up archive
95
+ fs.unlinkSync(archivePath);
96
+
97
+ // Make binary executable
98
+ const binPath = path.join(BIN_DIR, BIN_NAME);
99
+ if (fs.existsSync(binPath)) {
100
+ fs.chmodSync(binPath, 0o755);
101
+ console.log(`✓ Installed ${BIN_NAME} to ${binPath}`);
102
+ } else {
103
+ throw new Error(`Binary not found after extraction at ${binPath}`);
104
+ }
105
+ } catch (err) {
106
+ console.error(`\nFailed to download ${BIN_NAME}:\n ${err.message}`);
107
+ console.error(
108
+ `\nThis may mean the release "${tag}" hasn't been published yet.` +
109
+ "\nYou can build from source: go build -o cmd/mcp/npm/bin/robotdomainsearch-mcp ./cmd/mcp/"
110
+ );
111
+ process.exit(1);
112
+ }
113
+ }
114
+
115
+ main();
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@robotdomainsearch/mcp",
3
+ "version": "0.1.0",
4
+ "description": "RobotDomainSearch MCP Server — domain intelligence for AI agents",
5
+ "bin": {
6
+ "robotdomainsearch-mcp": "./index.js"
7
+ },
8
+ "scripts": {
9
+ "postinstall": "node install.js"
10
+ },
11
+ "keywords": [
12
+ "mcp",
13
+ "model-context-protocol",
14
+ "domain",
15
+ "whois",
16
+ "dns",
17
+ "rdap",
18
+ "ai",
19
+ "robotdomainsearch",
20
+ "claude",
21
+ "cursor"
22
+ ],
23
+ "license": "MIT",
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "https://github.com/erickuhn19/RobotDomainSearch-API"
27
+ },
28
+ "homepage": "https://robotdomainsearch.com/mcp/",
29
+ "bugs": {
30
+ "url": "https://github.com/erickuhn19/RobotDomainSearch-API/issues"
31
+ },
32
+ "files": [
33
+ "index.js",
34
+ "install.js",
35
+ "bin/",
36
+ "README.md"
37
+ ],
38
+ "engines": {
39
+ "node": ">=18"
40
+ },
41
+ "os": [
42
+ "darwin",
43
+ "linux"
44
+ ],
45
+ "cpu": [
46
+ "arm64",
47
+ "x64"
48
+ ]
49
+ }