@nordsym/apiclaw 1.3.8 → 1.3.9

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 CHANGED
@@ -10,14 +10,14 @@
10
10
  ## Quick Start
11
11
 
12
12
  ```bash
13
- # Auto-detect and configure all MCP clients
14
- npx @nordsym/apiclaw setup
13
+ # Install APIClaw into Claude Desktop or Claude Code
14
+ npx @nordsym/apiclaw mcp-install
15
15
 
16
16
  # That's it! Restart your AI assistant and ask:
17
17
  # "List available APIs" or "Send an SMS via 46elks"
18
18
  ```
19
19
 
20
- APIClaw automatically detects Claude Desktop, Cursor, Windsurf, Cline, and Continue — then configures itself as an MCP server in seconds.
20
+ APIClaw automatically detects Claude Desktop and Claude Code — then configures itself as an MCP server in seconds.
21
21
 
22
22
  ---
23
23
 
@@ -38,15 +38,15 @@ Instead of manually configuring API keys and reading documentation, just tell yo
38
38
 
39
39
  ## Installation
40
40
 
41
- ### Option 1: Auto-Setup (Recommended)
41
+ ### Option 1: MCP Install (Recommended)
42
42
 
43
43
  ```bash
44
- npx @nordsym/apiclaw setup
44
+ npx @nordsym/apiclaw mcp-install
45
45
  ```
46
46
 
47
47
  This will:
48
- 1. 🔍 Detect installed MCP clients
49
- 2. 📝 Add APIClaw to their config files
48
+ 1. 🔍 Detect Claude Desktop or Claude Code
49
+ 2. 📝 Add APIClaw to the MCP config
50
50
  3. ✅ Verify the setup
51
51
 
52
52
  ### Option 2: Manual Installation
@@ -64,9 +64,25 @@ Just use `npx @nordsym/apiclaw` anywhere — it downloads on demand.
64
64
 
65
65
  ## Commands
66
66
 
67
+ ### `mcp-install`
68
+
69
+ Simple, focused installation for Claude Desktop and Claude Code.
70
+
71
+ ```bash
72
+ # Auto-detect and install
73
+ npx @nordsym/apiclaw mcp-install
74
+
75
+ # Install to specific client
76
+ npx @nordsym/apiclaw mcp-install --client claude-desktop
77
+ npx @nordsym/apiclaw mcp-install --client claude-code
78
+
79
+ # Preview changes without applying
80
+ npx @nordsym/apiclaw mcp-install --dry-run
81
+ ```
82
+
67
83
  ### `setup`
68
84
 
69
- Configure APIClaw as an MCP server.
85
+ Full-featured setup with support for all MCP clients.
70
86
 
71
87
  ```bash
72
88
  # Auto-detect and configure all clients
@@ -255,7 +271,7 @@ export APICLAW_API_URL="https://api.company.com/apiclaw"
255
271
  # Disable telemetry
256
272
  export APICLAW_DISABLE_TELEMETRY="true"
257
273
 
258
- npx @nordsym/apiclaw setup
274
+ npx @nordsym/apiclaw mcp-install
259
275
  ```
260
276
 
261
277
  ### Generate Deployment Script
@@ -287,7 +303,7 @@ See [Enterprise Deployment Guide](docs/enterprise-deployment.md) for:
287
303
 
288
304
  ```bash
289
305
  # Option 1: Run with sudo
290
- sudo npx @nordsym/apiclaw setup
306
+ sudo npx @nordsym/apiclaw mcp-install
291
307
 
292
308
  # Option 2: Fix permissions
293
309
  chmod 644 ~/Library/Application\ Support/Claude/claude_desktop_config.json
@@ -296,11 +312,11 @@ chmod 644 ~/Library/Application\ Support/Claude/claude_desktop_config.json
296
312
  ### "Config file not found"
297
313
 
298
314
  The MCP client hasn't created its config yet:
299
- 1. Open the client (Claude Desktop, Cursor, etc.)
315
+ 1. Open the client (Claude Desktop or Claude Code)
300
316
  2. Close it
301
- 3. Try setup again
317
+ 3. Try mcp-install again
302
318
 
303
- Or specify a custom path:
319
+ Or use the full setup command with a custom path:
304
320
  ```bash
305
321
  npx @nordsym/apiclaw setup --config /path/to/config.json
306
322
  ```
package/dist/bin.js CHANGED
@@ -5,7 +5,7 @@
5
5
  * - No args or MCP-related args → Run MCP server
6
6
  * - setup/doctor/restore/uninstall → Run CLI
7
7
  */
8
- const cliCommands = ['setup', 'doctor', 'restore', 'uninstall', 'help', '--help', '-h', '--version', '-V'];
8
+ const cliCommands = ['setup', 'mcp-install', 'doctor', 'restore', 'uninstall', 'help', '--help', '-h', '--version', '-V'];
9
9
  const firstArg = process.argv[2];
10
10
  if (!firstArg || !cliCommands.includes(firstArg)) {
11
11
  // Run MCP server
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;AAE3G,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEjC,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IACjD,iBAAiB;IACjB,MAAM,CAAC,YAAY,CAAC,CAAC;AACvB,CAAC;KAAM,CAAC;IACN,UAAU;IACV,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;AAE1H,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEjC,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IACjD,iBAAiB;IACjB,MAAM,CAAC,YAAY,CAAC,CAAC;AACvB,CAAC;KAAM,CAAC;IACN,UAAU;IACV,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * MCP Install Command
3
+ * Simple, focused command to install APIClaw into MCP config files
4
+ * Supports Claude Desktop and Claude Code
5
+ */
6
+ export interface MCPInstallOptions {
7
+ client?: string;
8
+ dryRun?: boolean;
9
+ }
10
+ /**
11
+ * Main mcp-install command handler
12
+ */
13
+ export declare function mcpInstallCommand(options: MCPInstallOptions): Promise<void>;
14
+ //# sourceMappingURL=mcp-install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-install.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mcp-install.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA2KD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsGjF"}
@@ -0,0 +1,246 @@
1
+ /**
2
+ * MCP Install Command
3
+ * Simple, focused command to install APIClaw into MCP config files
4
+ * Supports Claude Desktop and Claude Code
5
+ */
6
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
7
+ import { dirname, join } from 'path';
8
+ import { platform, homedir } from 'os';
9
+ import chalk from 'chalk';
10
+ /**
11
+ * Detect operating system
12
+ */
13
+ function detectOS() {
14
+ const os = platform();
15
+ switch (os) {
16
+ case 'darwin': return 'mac';
17
+ case 'win32': return 'win';
18
+ default: return 'linux';
19
+ }
20
+ }
21
+ /**
22
+ * Get home directory
23
+ */
24
+ function getHome() {
25
+ return homedir();
26
+ }
27
+ /**
28
+ * Get config paths for supported clients
29
+ */
30
+ function getClientConfigs() {
31
+ const os = detectOS();
32
+ const home = getHome();
33
+ const clients = [
34
+ {
35
+ name: 'claude-desktop',
36
+ displayName: 'Claude Desktop',
37
+ configKey: 'mcpServers',
38
+ getConfigPath: () => {
39
+ switch (os) {
40
+ case 'mac':
41
+ return join(home, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');
42
+ case 'win':
43
+ return join(process.env.APPDATA || join(home, 'AppData', 'Roaming'), 'Claude', 'claude_desktop_config.json');
44
+ case 'linux':
45
+ return join(home, '.config', 'Claude', 'claude_desktop_config.json');
46
+ }
47
+ },
48
+ },
49
+ {
50
+ name: 'claude-code',
51
+ displayName: 'Claude Code',
52
+ configKey: 'mcpServers',
53
+ getConfigPath: () => {
54
+ // Claude Code uses ~/.claude.json on all platforms
55
+ return join(home, '.claude.json');
56
+ },
57
+ },
58
+ ];
59
+ return clients;
60
+ }
61
+ /**
62
+ * APIClaw MCP server configuration
63
+ */
64
+ const APICLAW_CONFIG = {
65
+ command: 'npx',
66
+ args: ['-y', '@nordsym/apiclaw', 'serve'],
67
+ };
68
+ /**
69
+ * Read JSON config file
70
+ */
71
+ function readConfig(path) {
72
+ try {
73
+ if (!existsSync(path)) {
74
+ return { success: true, config: {}, isNew: true };
75
+ }
76
+ const content = readFileSync(path, 'utf-8');
77
+ if (!content.trim()) {
78
+ return { success: true, config: {}, isNew: true };
79
+ }
80
+ return { success: true, config: JSON.parse(content), isNew: false };
81
+ }
82
+ catch (error) {
83
+ return {
84
+ success: false,
85
+ config: null,
86
+ error: error instanceof Error ? error.message : 'Unknown error'
87
+ };
88
+ }
89
+ }
90
+ /**
91
+ * Write JSON config file with backup
92
+ */
93
+ function writeConfig(path, config, createBackup = true) {
94
+ try {
95
+ const dir = dirname(path);
96
+ if (!existsSync(dir)) {
97
+ mkdirSync(dir, { recursive: true });
98
+ }
99
+ // Create backup if file exists
100
+ if (createBackup && existsSync(path)) {
101
+ const backupPath = `${path}.backup.${Date.now()}.json`;
102
+ const existing = readFileSync(path, 'utf-8');
103
+ writeFileSync(backupPath, existing, 'utf-8');
104
+ }
105
+ writeFileSync(path, JSON.stringify(config, null, 2), 'utf-8');
106
+ return { success: true };
107
+ }
108
+ catch (error) {
109
+ return {
110
+ success: false,
111
+ error: error instanceof Error ? error.message : 'Unknown error'
112
+ };
113
+ }
114
+ }
115
+ /**
116
+ * Install APIClaw into a client config
117
+ */
118
+ function installToClient(client, dryRun) {
119
+ const configPath = client.getConfigPath();
120
+ // Read existing config
121
+ const readResult = readConfig(configPath);
122
+ if (!readResult.success) {
123
+ return { success: false, message: `Failed to read config: ${readResult.error}` };
124
+ }
125
+ const config = readResult.config;
126
+ // Initialize mcpServers if not present
127
+ if (!config.mcpServers) {
128
+ config.mcpServers = {};
129
+ }
130
+ // Check if already installed
131
+ if (config.mcpServers.apiclaw) {
132
+ return { success: true, message: 'Already installed', skipped: true };
133
+ }
134
+ // Add APIClaw config
135
+ config.mcpServers.apiclaw = APICLAW_CONFIG;
136
+ if (dryRun) {
137
+ console.log(chalk.cyan(`\n Would add to ${configPath}:`));
138
+ console.log(chalk.gray(JSON.stringify({ apiclaw: APICLAW_CONFIG }, null, 4)));
139
+ return { success: true, message: 'Dry run - no changes made', skipped: true };
140
+ }
141
+ // Write config
142
+ const writeResult = writeConfig(configPath, config);
143
+ if (!writeResult.success) {
144
+ return { success: false, message: `Failed to write config: ${writeResult.error}` };
145
+ }
146
+ return {
147
+ success: true,
148
+ message: readResult.isNew ? 'Created new config' : 'Updated config'
149
+ };
150
+ }
151
+ /**
152
+ * Main mcp-install command handler
153
+ */
154
+ export async function mcpInstallCommand(options) {
155
+ const os = detectOS();
156
+ const osName = os === 'mac' ? 'macOS' : os === 'win' ? 'Windows' : 'Linux';
157
+ console.log(chalk.bold('\n🦞 APIClaw MCP Install\n'));
158
+ console.log(`Platform: ${osName}\n`);
159
+ const clients = getClientConfigs();
160
+ let targetClients = clients;
161
+ // Filter to specific client if requested
162
+ if (options.client) {
163
+ const normalizedClient = options.client.toLowerCase().replace(/[_\s]/g, '-');
164
+ const aliases = {
165
+ 'claude': 'claude-desktop',
166
+ 'claude-desktop': 'claude-desktop',
167
+ 'claudedesktop': 'claude-desktop',
168
+ 'desktop': 'claude-desktop',
169
+ 'code': 'claude-code',
170
+ 'claude-code': 'claude-code',
171
+ 'claudecode': 'claude-code',
172
+ };
173
+ const targetName = aliases[normalizedClient];
174
+ if (!targetName) {
175
+ console.log(chalk.red(`❌ Unknown client: ${options.client}`));
176
+ console.log(' Supported: claude-desktop, claude-code');
177
+ process.exit(1);
178
+ }
179
+ targetClients = clients.filter(c => c.name === targetName);
180
+ }
181
+ // Detect which clients exist
182
+ console.log('🔍 Detecting MCP clients...\n');
183
+ const detectedClients = [];
184
+ for (const client of targetClients) {
185
+ const configPath = client.getConfigPath();
186
+ const configDir = dirname(configPath);
187
+ const exists = existsSync(configPath) || existsSync(configDir);
188
+ const icon = exists ? chalk.green('✓') : chalk.gray('✗');
189
+ const status = exists ? 'found' : 'not found';
190
+ console.log(` ${icon} ${client.displayName} ${status}`);
191
+ if (exists) {
192
+ detectedClients.push(client);
193
+ }
194
+ }
195
+ console.log('');
196
+ if (detectedClients.length === 0) {
197
+ console.log(chalk.yellow('⚠️ No MCP clients detected.'));
198
+ console.log(' Install Claude Desktop or Claude Code first.\n');
199
+ process.exit(0);
200
+ }
201
+ // Install to each detected client
202
+ let successCount = 0;
203
+ let skipCount = 0;
204
+ let failCount = 0;
205
+ for (const client of detectedClients) {
206
+ const result = installToClient(client, options.dryRun || false);
207
+ if (result.success) {
208
+ if (result.skipped) {
209
+ skipCount++;
210
+ console.log(chalk.yellow(`⏭️ ${client.displayName}: ${result.message}`));
211
+ }
212
+ else {
213
+ successCount++;
214
+ console.log(chalk.green(`✓ ${client.displayName}: ${result.message}`));
215
+ }
216
+ }
217
+ else {
218
+ failCount++;
219
+ console.log(chalk.red(`✗ ${client.displayName}: ${result.message}`));
220
+ }
221
+ }
222
+ // Summary
223
+ console.log('\n' + '═'.repeat(50));
224
+ if (failCount === 0) {
225
+ if (options.dryRun) {
226
+ console.log(chalk.cyan('\n✅ Dry run complete! Run without --dry-run to apply changes.\n'));
227
+ }
228
+ else if (successCount > 0) {
229
+ console.log(chalk.green('\n✅ APIClaw installed successfully!\n'));
230
+ console.log('Next steps:');
231
+ console.log(' 1. Restart your MCP client (Claude Desktop/Code)');
232
+ console.log(' 2. Ask: "List available APIs"');
233
+ console.log('');
234
+ console.log('Need help? https://apiclaw.com/docs\n');
235
+ }
236
+ else {
237
+ console.log(chalk.yellow('\n✅ APIClaw already installed in all clients.\n'));
238
+ console.log('Run with --force to reinstall (coming soon).\n');
239
+ }
240
+ }
241
+ else {
242
+ console.log(chalk.red(`\n⚠️ Installation completed with ${failCount} error(s).\n`));
243
+ process.exit(1);
244
+ }
245
+ }
246
+ //# sourceMappingURL=mcp-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-install.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp-install.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -6,6 +6,7 @@
6
6
  import { Command } from 'commander';
7
7
  import { writeFileSync } from 'fs';
8
8
  import { setupCommand } from './commands/setup.js';
9
+ import { mcpInstallCommand } from './commands/mcp-install.js';
9
10
  import { doctorCommand } from './commands/doctor.js';
10
11
  import { restoreCommand } from './commands/restore.js';
11
12
  import { uninstallCommand } from './commands/uninstall.js';
@@ -61,6 +62,13 @@ program
61
62
  // Normal setup
62
63
  await setupCommand(options);
63
64
  });
65
+ // MCP Install command - simple focused installation
66
+ program
67
+ .command('mcp-install')
68
+ .description('Install APIClaw into Claude Desktop or Claude Code MCP config')
69
+ .option('-c, --client <client>', 'Target specific client (claude-desktop, claude-code)')
70
+ .option('--dry-run', 'Show what would happen without making changes')
71
+ .action(mcpInstallCommand);
64
72
  // Doctor command - health check
65
73
  program
66
74
  .command('doctor')
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -231,12 +231,8 @@
231
231
 
232
232
  <div class="form-group">
233
233
  <label>Preferred Day</label>
234
- <select name="day" required>
234
+ <select name="day" required id="day-select">
235
235
  <option value="">Select a day</option>
236
- <option value="tuesday">Tuesday (Feb 25)</option>
237
- <option value="wednesday">Wednesday (Feb 26)</option>
238
- <option value="thursday">Thursday (Feb 27)</option>
239
- <option value="friday">Friday (Feb 28)</option>
240
236
  </select>
241
237
  </div>
242
238
 
@@ -300,6 +296,29 @@
300
296
  }
301
297
  });
302
298
 
299
+ // Generate dynamic weekday options (next 5 weekdays)
300
+ const daySelect = document.getElementById('day-select');
301
+ const dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
302
+ const monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
303
+
304
+ let date = new Date();
305
+ let addedDays = 0;
306
+
307
+ while (addedDays < 5) {
308
+ date.setDate(date.getDate() + 1);
309
+ const dayOfWeek = date.getDay();
310
+ if (dayOfWeek !== 0 && dayOfWeek !== 6) { // Skip weekends
311
+ const dayName = dayNames[dayOfWeek];
312
+ const monthName = monthNames[date.getMonth()];
313
+ const dateNum = date.getDate();
314
+ const option = document.createElement('option');
315
+ option.value = `${dayName.toLowerCase()}-${date.toISOString().split('T')[0]}`;
316
+ option.textContent = `${dayName} (${monthName} ${dateNum})`;
317
+ daySelect.appendChild(option);
318
+ addedDays++;
319
+ }
320
+ }
321
+
303
322
  // Time slot selection
304
323
  document.querySelectorAll('.time-slot').forEach(slot => {
305
324
  slot.addEventListener('click', () => {
Binary file
@@ -94,7 +94,8 @@ try {
94
94
  ).length;
95
95
 
96
96
  // Direct call providers (hardcoded for now, update when adding new providers)
97
- const directCallCount = 10;
97
+ // Groq, Deepgram, Mistral, Cohere, Together, Stability, AssemblyAI, Serper, OpenAI, Anthropic, ElevenLabs, Replicate, Brave, Resend, Twilio, 46elks, Stripe, SendGrid
98
+ const directCallCount = 18;
98
99
 
99
100
  const stats = {
100
101
  apiCount: registry.count,
@@ -120,7 +121,7 @@ try {
120
121
  const fallback = {
121
122
  apiCount: 22392,
122
123
  openApiCount: 996,
123
- directCallCount: 10,
124
+ directCallCount: 18,
124
125
  categoryCount: 14,
125
126
  lastUpdated: new Date().toISOString().split('T')[0],
126
127
  generatedAt: new Date().toISOString(),
@@ -60,11 +60,9 @@ export async function GET() {
60
60
  >
61
61
  <span>{statsData.apiCount.toLocaleString()}+ APIs</span>
62
62
  <span>•</span>
63
- <span>{statsData.categoryCount} Categories</span>
63
+ <span>{statsData.directCallCount} Direct Call</span>
64
64
  <span>•</span>
65
65
  <span>MCP Native</span>
66
- <span>•</span>
67
- <span>Direct Call</span>
68
66
  </div>
69
67
  <div
70
68
  style={{
@@ -24,7 +24,7 @@ export const metadata: Metadata = {
24
24
  locale: "en_US",
25
25
  images: [
26
26
  {
27
- url: "/api/og?v=2",
27
+ url: "/api/og?v=4",
28
28
  width: 1200,
29
29
  height: 630,
30
30
  alt: "APIClaw - The API layer for AI agents",
@@ -10,6 +10,7 @@ import {
10
10
  import statsData from "@/lib/stats.json";
11
11
  import { useState, useEffect, useRef } from "react";
12
12
  import { HeroTabs } from "@/components/HeroTabs";
13
+ import { PhoneDemo } from "@/components/demo";
13
14
 
14
15
  const stats = [
15
16
  { number: statsData.apiCount.toLocaleString(), label: "APIs Indexed", live: true },
@@ -128,7 +129,7 @@ const providerBenefits = [
128
129
  ];
129
130
 
130
131
  const terminalLines = [
131
- { type: "prompt", text: "npx @nordsym/apiclaw" },
132
+ { type: "prompt", text: "npx @nordsym/apiclaw mcp-install" },
132
133
  { type: "output", text: "", delay: 500 },
133
134
  { type: "output", text: "🦞 APIClaw v1.2.2", delay: 100 },
134
135
  { type: "output", text: "", delay: 50 },
@@ -180,28 +181,34 @@ export default function Home() {
180
181
  ];
181
182
 
182
183
  const copyToClipboard = () => {
183
- navigator.clipboard.writeText('npx @nordsym/apiclaw');
184
+ navigator.clipboard.writeText('npx @nordsym/apiclaw mcp-install');
184
185
  setShowCopied(true);
185
186
  setTimeout(() => setShowCopied(false), 2000);
186
187
  };
187
188
 
188
189
  const copyContextToClipboard = () => {
189
- const context = `APIClaw is the API layer for AI agents. It's an MCP (Model Context Protocol) server that lets agents discover and call APIs autonomously.
190
+ const context = `APIClaw Direct Call Execution Layer for AI Agents
190
191
 
191
- Coverage:
192
- • ${statsData.apiCount.toLocaleString()}+ APIs indexed (searchable catalog)
193
- • ${statsData.openApiCount.toLocaleString()}+ Open APIs (no auth required)
194
- • ${statsData.directCallCount} Direct Call providers (we handle auth: Replicate, OpenRouter, ElevenLabs, etc.)
192
+ You have access to APIClaw, an MCP server that lets you execute API calls WITHOUT managing keys.
195
193
 
196
- Tools available:
197
- discover_apis - Search by capability ("send SMS", "generate image") not keywords
198
- get_api_details - Full specs, auth requirements, pricing, endpoints
199
- call_api - Execute via Direct Call (no API keys needed) or get specs for self-hosting
200
- • list_connected - See available Direct Call providers
194
+ Direct Call = Zero-Config Execution:
195
+ No API key management needed
196
+ APIClaw handles auth, headers, signatures
197
+ • Execute immediately on ${statsData.directCallCount} providers
201
198
 
202
- Install: npx @nordsym/apiclaw
203
- Docs: https://apiclaw.nordsym.com/docs
204
- Website: https://apiclaw.nordsym.com`;
199
+ Available Providers:
200
+ Replicate (AI models), ElevenLabs (voice), OpenRouter (LLMs), Resend (email), 46elks (SMS), Brave Search, Firecrawl, E2B, GitHub
201
+
202
+ Your Tools:
203
+ • list_connected - See providers ready for instant execution
204
+ • call_api(provider, action, params) - Execute directly. Auth handled by APIClaw — omit/leave auth fields empty
205
+ • discover_apis - Search ${statsData.apiCount.toLocaleString()}+ APIs by capability
206
+ • get_api_details - Full specs if you need them
207
+
208
+ You have authority to act. Use call_api directly.
209
+
210
+ Install: npx @nordsym/apiclaw mcp-install
211
+ Docs: https://apiclaw.nordsym.com/docs`;
205
212
  navigator.clipboard.writeText(context);
206
213
  setShowContextCopied(true);
207
214
  setTimeout(() => setShowContextCopied(false), 2500);
@@ -283,8 +290,13 @@ Website: https://apiclaw.nordsym.com`;
283
290
 
284
291
  return (
285
292
  <main className="min-h-screen overflow-x-hidden">
293
+ {/* Early Access Banner */}
294
+ <div className="fixed top-0 w-full z-[60] bg-accent text-background text-center py-2 px-4 text-sm font-medium">
295
+ 🦞 <span className="font-bold">Early Access</span> — Join the first wave of agents
296
+ </div>
297
+
286
298
  {/* Header */}
287
- <header className="fixed top-0 w-full z-50 bg-background/80 backdrop-blur-xl border-b border-border-subtle">
299
+ <header className="fixed top-9 w-full z-50 bg-background/80 backdrop-blur-xl border-b border-border-subtle">
288
300
  <div className="max-w-6xl mx-auto px-4 sm:px-6 py-3 sm:py-4 flex items-center justify-between">
289
301
  <div className="flex items-center gap-2 sm:gap-3">
290
302
  <div className="w-8 h-8 sm:w-10 sm:h-10 rounded-xl bg-accent/20 flex items-center justify-center text-xl sm:text-2xl logo-float">
@@ -434,7 +446,7 @@ Website: https://apiclaw.nordsym.com`;
434
446
  </header>
435
447
 
436
448
  {/* Hero */}
437
- <section className="relative pt-32 pb-20 px-6 bg-grid">
449
+ <section className="relative pt-44 pb-20 px-6 bg-grid">
438
450
  <div className="hero-glow" />
439
451
 
440
452
  <div className="max-w-6xl mx-auto relative z-10">
@@ -524,6 +536,21 @@ Website: https://apiclaw.nordsym.com`;
524
536
  </div>
525
537
  </section>
526
538
 
539
+ {/* Phone Demo - With vs Without APIClaw */}
540
+ <section className="py-20 px-6">
541
+ <div className="max-w-5xl mx-auto">
542
+ <div className="text-center mb-12">
543
+ <h2 className="text-3xl md:text-4xl font-bold mb-4">
544
+ See the Difference
545
+ </h2>
546
+ <p className="text-text-muted text-lg max-w-2xl mx-auto">
547
+ Toggle to compare what happens when your AI agent has APIClaw — versus doing it the old way.
548
+ </p>
549
+ </div>
550
+ <PhoneDemo />
551
+ </div>
552
+ </section>
553
+
527
554
  {/* Direct Call Modal */}
528
555
  {showDirectCallModal && (
529
556
  <div className="fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/80 backdrop-blur-sm" onClick={() => setShowDirectCallModal(false)}>
@@ -956,7 +983,7 @@ Website: https://apiclaw.nordsym.com`;
956
983
  </li>
957
984
  <li className="flex items-start gap-3 text-text-secondary text-sm sm:text-base">
958
985
  <Check className="w-5 h-5 text-accent flex-shrink-0 mt-0.5" />
959
- 10+ providers (AI Models, Scraping, Code, Search)
986
+ 18 providers (AI Models, Scraping, Code, Search)
960
987
  </li>
961
988
  <li className="flex items-start gap-3 text-text-secondary text-sm sm:text-base">
962
989
  <Check className="w-5 h-5 text-accent flex-shrink-0 mt-0.5" />
@@ -1029,7 +1056,7 @@ Website: https://apiclaw.nordsym.com`;
1029
1056
  },
1030
1057
  {
1031
1058
  q: "How does Direct Call work?",
1032
- a: "Direct Call lets your agent use APIs without managing API keys. APIClaw handles authentication — your agent just calls the API through us. Currently available for 10+ providers including Replicate (1000+ ML models), OpenRouter (100+ LLMs), Firecrawl (web scraping), E2B (code sandbox), and more."
1059
+ a: "Direct Call lets your agent use APIs without managing API keys. APIClaw handles authentication — your agent just calls the API through us. Currently available for 18 providers including Replicate (1000+ ML models), OpenRouter (100+ LLMs), Firecrawl (web scraping), E2B (code sandbox), and more."
1033
1060
  },
1034
1061
  {
1035
1062
  q: "How are API credentials secured?",
@@ -1151,7 +1178,7 @@ Website: https://apiclaw.nordsym.com`;
1151
1178
 
1152
1179
  {/* Telegram Chat Bubble */}
1153
1180
  <a
1154
- href="https://t.me/Symbot_apiclaw_bot"
1181
+ href="https://t.me/Symbot_nordsym_bot?start=apiclaw"
1155
1182
  target="_blank"
1156
1183
  rel="noopener noreferrer"
1157
1184
  className="fixed bottom-6 right-6 z-50 group"