@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 +95 -0
- package/bin/.gitkeep +0 -0
- package/index.js +51 -0
- package/install.js +115 -0
- package/package.json +49 -0
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
|
+
}
|