Skill: haveblue997/mcp-domain-intel (version 1.0.0)

--- name: mcp-domain-intel description: Domain intelligence — WHOIS lookups and domain availability checks via L402 API. Use for brand research, cybersecurity investigations, and domain acquisition planning. version: 1.0.0 metadata: openclaw: requires: bins: - npx env: - L402_API_BASE_URL emoji: 🔍 --- # Domain Intel (L402) WHOIS lookups and domain availability checks — fast domain intelligence for agents. ## Setup ```json { "mcpServers": { "domain-intel": { "command": "npx", "args": ["-y", "@vbotholemu/mcp-domain-intel"], "env": { "L402_API_BASE_URL": "https://api.nautdev.com" } } } } ``` ## Tools ### `whois_lookup` Full WHOIS/DNS intelligence for a domain. | Parameter | Type | Required | Description | |-----------|--------|----------|-------------| | domain | string | yes | Domain to look up | ### `check_availability` Check if a domain is available for registration. | Parameter | Type | Required | Description | |-----------|--------|----------|-------------| | domain | string | yes | Domain to check | ## When to Use - Brand protection and monitoring - Domain acquisition research - Cybersecurity investigations - Competitor analysis

path: README.md
content: # @blue-trianon/mcp-domain-intel

MCP tool for domain intelligence — WHOIS lookups and domain availability checks via the L402 API.

## Features

- WHOIS and DNS intelligence lookups
- Domain availability checking
- Configurable base URL via environment variable
- Powered by L402 micropayments

## MCP Server Configuration

Add to your MCP client configuration:

```json
{
  "mcpServers": {
    "domain-intel": {
      "command": "npx",
      "args": ["-y", "@blue-trianon/mcp-domain-intel"],
      "env": {
        "NAUTDEV_BASE_URL": "https://api.nautdev.com"
      }
    }
  }
}
```

Or if installed globally:

```json
{
  "mcpServers": {
    "domain-intel": {
      "command": "mcp-domain-intel"
    }
  }
}
```

## Tools

### lookup

Look up WHOIS and DNS intelligence for a domain name.

| Parameter | Type   | Required | Description                        |
|-----------|--------|----------|------------------------------------|
| domain    | string | yes      | Domain name (e.g. example.com)    |

### available

Check if a domain name is available for registration.

| Parameter | Type   | Required | Description                        |
|-----------|--------|----------|------------------------------------|
| domain    | string | yes      | Domain name (e.g. example.com)    |

## Pricing

Requests are metered via L402 micropayments. See [Blue-Trianon-Ventures](https://github.com/Blue-Trianon-Ventures) for pricing details.

## License

MIT


path: dist/index.d.ts
content: #!/usr/bin/env node
export {};
//# sourceMappingURL=index.d.ts.map

path: dist/index.js
content: #!/usr/bin/env node
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
const zod_1 = require("zod");
const BASE_URL = process.env.NAUTDEV_BASE_URL || "https://api.nautdev.com";
async function apiFetch(path) {
    const response = await fetch(`${BASE_URL}${path}`, {
        headers: { Accept: "application/json" },
    });
    if (!response.ok) {
        throw new Error(`API error: ${response.status} ${response.statusText}`);
    }
    return response.json();
}
const server = new mcp_js_1.McpServer({
    name: "domain-intel",
    version: "1.0.0",
});
server.tool("lookup", "Look up WHOIS and DNS intelligence for a domain name.", {
    domain: zod_1.z.string().describe("Domain name to look up (e.g. example.com)"),
}, async ({ domain }) => {
    try {
        const result = await apiFetch(`/api/v1/domain/lookup?domain=${encodeURIComponent(domain)}`);
        return {
            content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
        };
    }
    catch (error) {
        const message = error instanceof Error ? error.message : String(error);
        return {
            content: [{ type: "text", text: JSON.stringify({ error: `Failed to look up domain: ${message}` }) }],
            isError: true,
        };
    }
});
server.tool("available", "Check if a domain name is available for registration.", {
    domain: zod_1.z.string().describe("Domain name to check availability (e.g. example.com)"),
}, async ({ domain }) => {
    try {
        const result = await apiFetch(`/api/v1/domain/available?domain=${encodeURIComponent(domain)}`);
        return {
            content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
        };
    }
    catch (error) {
        const message = error instanceof Error ? error.message : String(error);
        return {
            content: [{ type: "text", text: JSON.stringify({ error: `Failed to check availability: ${message}` }) }],
            isError: true,
        };
    }
});
async function main() {
    const transport = new stdio_js_1.StdioServerTransport();
    await server.connect(transport);
}
main().catch((error) => {
    console.error("Server error:", error);
    process.exit(1);
});
//# sourceMappingURL=index.js.map

path: package.json
content: {
  "name": "@vbotholemu/mcp-domain-intel",
  "version": "1.0.0",
  "description": "MCP tool for domain intelligence — WHOIS lookup and availability checks via L402 API",
  "main": "dist/index.js",
  "types": "dist/index.d.ts",
  "bin": {
    "mcp-domain-intel": "dist/index.js"
  },
  "scripts": {
    "build": "tsc",
    "start": "node dist/index.js",
    "dev": "tsc --watch"
  },
  "keywords": [
    "mcp",
    "domain",
    "whois",
    "dns",
    "intel",
    "l402"
  ],
  "author": "Blue-Trianon-Ventures",
  "license": "MIT",
  "dependencies": {
    "@modelcontextprotocol/sdk": "^1.12.1",
    "zod": "^3.23.0"
  },
  "devDependencies": {
    "typescript": "^5.7.0",
    "@types/node": "^22.0.0"
  }
}


path: src/index.ts
content: #!/usr/bin/env node

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

const BASE_URL = process.env.NAUTDEV_BASE_URL || "https://api.nautdev.com";

async function apiFetch<T>(path: string): Promise<T> {
  const response = await fetch(`${BASE_URL}${path}`, {
    headers: { Accept: "application/json" },
  });

  if (!response.ok) {
    throw new Error(`API error: ${response.status} ${response.statusText}`);
  }

  return response.json() as Promise<T>;
}

const server = new McpServer({
  name: "domain-intel",
  version: "1.0.0",
});

server.tool(
  "lookup",
  "Look up WHOIS and DNS intelligence for a domain name.",
  {
    domain: z.string().min(1).describe("Domain name to look up (e.g. example.com)"),
  },
  async ({ domain }) => {
    try {
      const result = await apiFetch(`/api/v1/domain/lookup?domain=${encodeURIComponent(domain)}`);
      return {
        content: [{ type: "text" as const, text: JSON.stringify(result, null, 2) }],
      };
    } catch (error) {
      const message = error instanceof Error ? error.message : String(error);
      return {
        content: [{ type: "text" as const, text: JSON.stringify({ error: `Failed to look up domain: ${message}` }) }],
        isError: true,
      };
    }
  }
);

server.tool(
  "available",
  "Check if a domain name is available for registration.",
  {
    domain: z.string().min(1).describe("Domain name to check availability (e.g. example.com)"),
  },
  async ({ domain }) => {
    try {
      const result = await apiFetch(`/api/v1/domain/available?domain=${encodeURIComponent(domain)}`);
      return {
        content: [{ type: "text" as const, text: JSON.stringify(result, null, 2) }],
      };
    } catch (error) {
      const message = error instanceof Error ? error.message : String(error);
      return {
        content: [{ type: "text" as const, text: JSON.stringify({ error: `Failed to check availability: ${message}` }) }],
        isError: true,
      };
    }
  }
);

async function main() {
  const transport = new StdioServerTransport();
  await server.connect(transport);
}

main().catch((error) => {
  console.error("Server error:", error);
  process.exit(1);
});


path: tsconfig.json
content: {
  "extends": "../../tsconfig.base.json",
  "compilerOptions": {
    "outDir": "dist",
    "rootDir": "src"
  },
  "include": ["src"]
}


Security scan verdicts — ClawScan: clean | static analysis: suspicious | VirusTotal: clean | SkillSpector: clean (LOW)