recker 1.0.21-next.79f2703 → 1.0.21-next.cd9a658

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.
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,136 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { MCPServer } from './server.js';
4
+ const program = new Command();
5
+ const TOOL_CATEGORIES = {
6
+ docs: [
7
+ 'rek_search_docs',
8
+ 'rek_get_doc',
9
+ 'rek_code_examples',
10
+ 'rek_api_schema',
11
+ 'rek_suggest',
12
+ ],
13
+ http: ['rek_http_request'],
14
+ dns: ['rek_dns_lookup'],
15
+ whois: ['rek_whois_lookup'],
16
+ ping: ['rek_network_ping'],
17
+ ip: ['rek_ip_lookup'],
18
+ network: [
19
+ 'rek_http_request',
20
+ 'rek_dns_lookup',
21
+ 'rek_whois_lookup',
22
+ 'rek_network_ping',
23
+ ],
24
+ };
25
+ program
26
+ .name('recker-mcp')
27
+ .description('Start the Recker MCP server for AI agent integration')
28
+ .version('1.0.0')
29
+ .option('-t, --transport <mode>', 'Transport mode: stdio, http, sse', 'stdio')
30
+ .option('-p, --port <number>', 'HTTP/SSE server port', '3100')
31
+ .option('-d, --debug', 'Enable debug logging', false)
32
+ .option('--docs-path <path>', 'Path to documentation directory')
33
+ .option('--examples-path <path>', 'Path to examples directory')
34
+ .option('--src-path <path>', 'Path to source directory')
35
+ .option('--no-docs', 'Disable documentation tools (search, get, examples, schema, suggest)')
36
+ .option('--no-http', 'Disable HTTP request tool')
37
+ .option('--no-dns', 'Disable DNS lookup tool')
38
+ .option('--no-whois', 'Disable WHOIS lookup tool')
39
+ .option('--no-ping', 'Disable network ping tool')
40
+ .option('--no-ip', 'Disable IP lookup tool')
41
+ .option('--no-network', 'Disable all network tools (http, dns, whois, ping)')
42
+ .option('--only <tools>', 'Only enable specified tools (comma-separated)')
43
+ .option('--filter <patterns>', 'Custom tool filter patterns (comma-separated, prefix with ! to exclude)')
44
+ .action(async (opts) => {
45
+ const toolsFilter = [];
46
+ if (opts.only) {
47
+ const onlyTools = opts.only.split(',').map((t) => t.trim());
48
+ toolsFilter.push(...onlyTools);
49
+ }
50
+ if (opts.filter) {
51
+ const patterns = opts.filter.split(',').map((p) => p.trim());
52
+ toolsFilter.push(...patterns);
53
+ }
54
+ if (!opts.only && !opts.filter) {
55
+ if (opts.docs === false) {
56
+ TOOL_CATEGORIES.docs.forEach(tool => toolsFilter.push(`!${tool}`));
57
+ }
58
+ if (opts.network === false) {
59
+ TOOL_CATEGORIES.network.forEach(tool => toolsFilter.push(`!${tool}`));
60
+ }
61
+ else {
62
+ if (opts.http === false) {
63
+ toolsFilter.push('!rek_http_request');
64
+ }
65
+ if (opts.dns === false) {
66
+ toolsFilter.push('!rek_dns_lookup');
67
+ }
68
+ if (opts.whois === false) {
69
+ toolsFilter.push('!rek_whois_lookup');
70
+ }
71
+ if (opts.ping === false) {
72
+ toolsFilter.push('!rek_network_ping');
73
+ }
74
+ }
75
+ if (opts.ip === false) {
76
+ toolsFilter.push('!rek_ip_lookup');
77
+ }
78
+ }
79
+ const transport = opts.transport;
80
+ const port = parseInt(opts.port, 10);
81
+ if (!['stdio', 'http', 'sse'].includes(transport)) {
82
+ console.error(`Invalid transport mode: ${transport}. Use: stdio, http, or sse`);
83
+ process.exit(1);
84
+ }
85
+ const server = new MCPServer({
86
+ transport,
87
+ port,
88
+ debug: opts.debug,
89
+ docsPath: opts.docsPath,
90
+ examplesPath: opts.examplesPath,
91
+ srcPath: opts.srcPath,
92
+ toolsFilter: toolsFilter.length > 0 ? toolsFilter : undefined,
93
+ });
94
+ if (transport !== 'stdio') {
95
+ console.log('╔═══════════════════════════════════════════════════════════════════╗');
96
+ console.log('║ Recker MCP Server ║');
97
+ console.log('╚═══════════════════════════════════════════════════════════════════╝');
98
+ console.log('');
99
+ console.log(` Transport: ${transport}`);
100
+ console.log(` Port: ${port}`);
101
+ console.log(` Debug: ${opts.debug ? 'enabled' : 'disabled'}`);
102
+ if (toolsFilter.length > 0) {
103
+ console.log(` Filters: ${toolsFilter.join(', ')}`);
104
+ }
105
+ console.log('');
106
+ console.log(' Available tools:');
107
+ const allTools = [
108
+ ...TOOL_CATEGORIES.docs,
109
+ ...TOOL_CATEGORIES.network,
110
+ 'rek_ip_lookup',
111
+ ];
112
+ const enabledTools = allTools.filter(tool => {
113
+ if (toolsFilter.length === 0)
114
+ return true;
115
+ const positive = toolsFilter.filter(p => !p.startsWith('!'));
116
+ const negative = toolsFilter.filter(p => p.startsWith('!')).map(p => p.slice(1));
117
+ if (negative.includes(tool))
118
+ return false;
119
+ if (positive.length === 0)
120
+ return true;
121
+ return positive.includes(tool);
122
+ });
123
+ enabledTools.forEach(tool => {
124
+ console.log(` ✓ ${tool}`);
125
+ });
126
+ const disabledTools = allTools.filter(t => !enabledTools.includes(t));
127
+ if (disabledTools.length > 0) {
128
+ disabledTools.forEach(tool => {
129
+ console.log(` ✗ ${tool} (disabled)`);
130
+ });
131
+ }
132
+ console.log('');
133
+ }
134
+ await server.start();
135
+ });
136
+ program.parse();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "recker",
3
- "version": "1.0.21-next.79f2703",
3
+ "version": "1.0.21-next.cd9a658",
4
4
  "description": "AI & DevX focused HTTP client for Node.js 18+",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",