intodns-mcp 1.0.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 +77 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/package.json +47 -0
package/README.md
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# IntoDNS MCP Server
|
|
2
|
+
|
|
3
|
+
An [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that gives AI assistants (Claude, Cursor, Windsurf, etc.) direct access to [IntoDNS.ai](https://intodns.ai) DNS and email security scanning.
|
|
4
|
+
|
|
5
|
+
Ask your AI: *"Check the DNS security of example.com"* and it will run a live scan, grade the domain, and explain the findings — no copy-pasting, no tab switching.
|
|
6
|
+
|
|
7
|
+
## Tools
|
|
8
|
+
|
|
9
|
+
| Tool | What it does |
|
|
10
|
+
|------|-------------|
|
|
11
|
+
| `scan_domain` | Full DNS & email security scan — grade (A+ to F), score, 50+ checks |
|
|
12
|
+
| `check_email_security` | SPF, DKIM, DMARC validation + blacklist status |
|
|
13
|
+
| `lookup_dns` | DNS record lookup (A, AAAA, MX, TXT, NS, CNAME, SOA, CAA, SRV) |
|
|
14
|
+
| `check_dns_propagation` | Global propagation check across multiple resolvers |
|
|
15
|
+
| `validate_dnssec` | DNSSEC signing, key chain, and DS record validation |
|
|
16
|
+
|
|
17
|
+
Free to use. No API key required. Powered by [IntoDNS.ai](https://intodns.ai).
|
|
18
|
+
|
|
19
|
+
## Quick Start (Claude Desktop)
|
|
20
|
+
|
|
21
|
+
### Option A — npx (no install)
|
|
22
|
+
|
|
23
|
+
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"mcpServers": {
|
|
28
|
+
"intodns": {
|
|
29
|
+
"command": "npx",
|
|
30
|
+
"args": ["-y", "intodns-mcp"]
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Option B — global install
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npm install -g intodns-mcp
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Then in `claude_desktop_config.json`:
|
|
43
|
+
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"mcpServers": {
|
|
47
|
+
"intodns": {
|
|
48
|
+
"command": "intodns-mcp"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Restart Claude Desktop after editing the config.
|
|
55
|
+
|
|
56
|
+
## Usage with Claude
|
|
57
|
+
|
|
58
|
+
Once connected, you can ask Claude things like:
|
|
59
|
+
|
|
60
|
+
- *"Scan example.com and tell me what's wrong with their email security"*
|
|
61
|
+
- *"Does example.com have DMARC configured correctly?"*
|
|
62
|
+
- *"Look up the MX records for example.com"*
|
|
63
|
+
- *"Has my SPF change propagated globally yet?"*
|
|
64
|
+
- *"Check if example.com is on any email blacklists"*
|
|
65
|
+
|
|
66
|
+
## Other MCP clients
|
|
67
|
+
|
|
68
|
+
Works with any MCP-compatible client (Cursor, Windsurf, Continue, etc.). Use the same `command` / `args` format from the config above.
|
|
69
|
+
|
|
70
|
+
## Requirements
|
|
71
|
+
|
|
72
|
+
- Node.js 18+
|
|
73
|
+
- Internet access to reach `intodns.ai`
|
|
74
|
+
|
|
75
|
+
## License
|
|
76
|
+
|
|
77
|
+
MIT — built by [Cobytes B.V.](https://cobytes.com)
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
5
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
6
|
+
const zod_1 = require("zod");
|
|
7
|
+
const BASE_URL = "https://intodns.ai/api";
|
|
8
|
+
async function apiFetch(path) {
|
|
9
|
+
const res = await fetch(`${BASE_URL}${path}`, {
|
|
10
|
+
headers: { "User-Agent": "intodns-mcp/1.0" },
|
|
11
|
+
});
|
|
12
|
+
if (!res.ok) {
|
|
13
|
+
throw new Error(`IntoDNS.ai API error: ${res.status} ${res.statusText}`);
|
|
14
|
+
}
|
|
15
|
+
return res.json();
|
|
16
|
+
}
|
|
17
|
+
const server = new mcp_js_1.McpServer({
|
|
18
|
+
name: "intodns",
|
|
19
|
+
version: "1.0.0",
|
|
20
|
+
});
|
|
21
|
+
server.tool("scan_domain", "Run a full DNS & email security scan on a domain. Returns a grade (A+ to F), security score, and findings for DNS, email authentication (SPF/DKIM/DMARC), blacklists, and DNSSEC.", { domain: zod_1.z.string().describe("Domain name to scan, e.g. example.com") }, async ({ domain }) => {
|
|
22
|
+
const data = await apiFetch(`/scan/quick?domain=${encodeURIComponent(domain)}`);
|
|
23
|
+
return {
|
|
24
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
server.tool("check_email_security", "Check email authentication records for a domain: SPF, DKIM, DMARC, and blacklist status. Returns parsed records, validity, issues, and recommendations.", { domain: zod_1.z.string().describe("Domain name to check, e.g. example.com") }, async ({ domain }) => {
|
|
28
|
+
const data = await apiFetch(`/email/check?domain=${encodeURIComponent(domain)}`);
|
|
29
|
+
return {
|
|
30
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
server.tool("lookup_dns", "Look up DNS records for a domain. Supports record types: A, AAAA, MX, TXT, NS, CNAME, SOA, CAA, SRV.", {
|
|
34
|
+
domain: zod_1.z.string().describe("Domain name to look up"),
|
|
35
|
+
type: zod_1.z
|
|
36
|
+
.enum(["A", "AAAA", "MX", "TXT", "NS", "CNAME", "SOA", "CAA", "SRV"])
|
|
37
|
+
.describe("DNS record type"),
|
|
38
|
+
}, async ({ domain, type }) => {
|
|
39
|
+
const data = await apiFetch(`/dns/lookup?domain=${encodeURIComponent(domain)}&type=${type}`);
|
|
40
|
+
return {
|
|
41
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
server.tool("check_dns_propagation", "Check if DNS changes have propagated globally by querying multiple resolvers across different regions.", { domain: zod_1.z.string().describe("Domain name to check propagation for") }, async ({ domain }) => {
|
|
45
|
+
const data = await apiFetch(`/dns/propagation?domain=${encodeURIComponent(domain)}`);
|
|
46
|
+
return {
|
|
47
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
server.tool("validate_dnssec", "Validate DNSSEC configuration for a domain. Checks signing, key chain, and DS record presence.", { domain: zod_1.z.string().describe("Domain name to validate DNSSEC for") }, async ({ domain }) => {
|
|
51
|
+
const data = await apiFetch(`/dns/dnssec?domain=${encodeURIComponent(domain)}`);
|
|
52
|
+
return {
|
|
53
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
54
|
+
};
|
|
55
|
+
});
|
|
56
|
+
async function main() {
|
|
57
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
58
|
+
await server.connect(transport);
|
|
59
|
+
}
|
|
60
|
+
main().catch(console.error);
|
|
61
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "intodns-mcp",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "MCP server for IntoDNS.ai — DNS & email security scanning from Claude and other AI assistants",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"intodns-mcp": "dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"README.md"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"start": "node dist/index.js",
|
|
16
|
+
"prepare": "npm run build"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"mcp",
|
|
20
|
+
"model-context-protocol",
|
|
21
|
+
"dns",
|
|
22
|
+
"email-security",
|
|
23
|
+
"spf",
|
|
24
|
+
"dkim",
|
|
25
|
+
"dmarc",
|
|
26
|
+
"dnssec",
|
|
27
|
+
"claude",
|
|
28
|
+
"intodns"
|
|
29
|
+
],
|
|
30
|
+
"author": "Cobytes B.V.",
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@modelcontextprotocol/sdk": "^1.10.2"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/node": "^22.0.0",
|
|
37
|
+
"typescript": "^5.7.0"
|
|
38
|
+
},
|
|
39
|
+
"engines": {
|
|
40
|
+
"node": ">=18"
|
|
41
|
+
},
|
|
42
|
+
"repository": {
|
|
43
|
+
"type": "git",
|
|
44
|
+
"url": "git+https://github.com/RoscoNL/intodns-mcp-server.git"
|
|
45
|
+
},
|
|
46
|
+
"homepage": "https://intodns.ai"
|
|
47
|
+
}
|