@nordsym/apiclaw 1.3.7 → 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 +436 -200
- package/convex/_generated/api.d.ts +4 -0
- package/convex/agents.ts +403 -0
- package/convex/directCall.ts +80 -0
- package/convex/earnProgress.ts +753 -0
- package/convex/logs.ts +17 -0
- package/convex/providerKeys.ts +82 -2
- package/convex/schema.ts +71 -2
- package/convex/workspaces.ts +84 -2
- package/dist/adapters/base.d.ts +112 -0
- package/dist/adapters/base.d.ts.map +1 -0
- package/dist/adapters/base.js +247 -0
- package/dist/adapters/base.js.map +1 -0
- package/dist/adapters/claude-desktop.d.ts +12 -0
- package/dist/adapters/claude-desktop.d.ts.map +1 -0
- package/dist/adapters/claude-desktop.js +36 -0
- package/dist/adapters/claude-desktop.js.map +1 -0
- package/dist/adapters/cline.d.ts +20 -0
- package/dist/adapters/cline.d.ts.map +1 -0
- package/dist/adapters/cline.js +77 -0
- package/dist/adapters/cline.js.map +1 -0
- package/dist/adapters/continue.d.ts +26 -0
- package/dist/adapters/continue.d.ts.map +1 -0
- package/dist/adapters/continue.js +68 -0
- package/dist/adapters/continue.js.map +1 -0
- package/dist/adapters/cursor.d.ts +12 -0
- package/dist/adapters/cursor.d.ts.map +1 -0
- package/dist/adapters/cursor.js +38 -0
- package/dist/adapters/cursor.js.map +1 -0
- package/dist/adapters/custom.d.ts +47 -0
- package/dist/adapters/custom.d.ts.map +1 -0
- package/dist/adapters/custom.js +146 -0
- package/dist/adapters/custom.js.map +1 -0
- package/dist/adapters/detect.d.ts +69 -0
- package/dist/adapters/detect.d.ts.map +1 -0
- package/dist/adapters/detect.js +158 -0
- package/dist/adapters/detect.js.map +1 -0
- package/dist/adapters/index.d.ts +21 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +23 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/windsurf.d.ts +12 -0
- package/dist/adapters/windsurf.d.ts.map +1 -0
- package/dist/adapters/windsurf.js +39 -0
- package/dist/adapters/windsurf.js.map +1 -0
- package/dist/bin.d.ts +9 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +19 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +34 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +312 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/index.d.ts +9 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +9 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/mcp-install.d.ts +14 -0
- package/dist/cli/commands/mcp-install.d.ts.map +1 -0
- package/dist/cli/commands/mcp-install.js +246 -0
- package/dist/cli/commands/mcp-install.js.map +1 -0
- package/dist/cli/commands/restore.d.ts +50 -0
- package/dist/cli/commands/restore.d.ts.map +1 -0
- package/dist/cli/commands/restore.js +260 -0
- package/dist/cli/commands/restore.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +19 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +206 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/uninstall.d.ts +37 -0
- package/dist/cli/commands/uninstall.d.ts.map +1 -0
- package/dist/cli/commands/uninstall.js +189 -0
- package/dist/cli/commands/uninstall.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +105 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/discovery.d.ts +6 -2
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +296 -2
- package/dist/discovery.js.map +1 -1
- package/dist/enterprise/env.d.ts +56 -0
- package/dist/enterprise/env.d.ts.map +1 -0
- package/dist/enterprise/env.js +124 -0
- package/dist/enterprise/env.js.map +1 -0
- package/dist/enterprise/index.d.ts +7 -0
- package/dist/enterprise/index.d.ts.map +1 -0
- package/dist/enterprise/index.js +7 -0
- package/dist/enterprise/index.js.map +1 -0
- package/dist/enterprise/script-generator.d.ts +32 -0
- package/dist/enterprise/script-generator.d.ts.map +1 -0
- package/dist/enterprise/script-generator.js +461 -0
- package/dist/enterprise/script-generator.js.map +1 -0
- package/dist/execute.d.ts +21 -0
- package/dist/execute.d.ts.map +1 -1
- package/dist/execute.js +231 -0
- package/dist/execute.js.map +1 -1
- package/dist/index.js +79 -7
- package/dist/index.js.map +1 -1
- package/dist/stripe.d.ts +1 -1
- package/dist/stripe.js +1 -1
- package/dist/stripe.js.map +1 -1
- package/dist/types.d.ts +29 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/colors.d.ts +111 -0
- package/dist/ui/colors.d.ts.map +1 -0
- package/dist/ui/colors.js +185 -0
- package/dist/ui/colors.js.map +1 -0
- package/dist/ui/errors.d.ts +69 -0
- package/dist/ui/errors.d.ts.map +1 -0
- package/dist/ui/errors.js +334 -0
- package/dist/ui/errors.js.map +1 -0
- package/dist/ui/index.d.ts +10 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +14 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/prompts.d.ts +88 -0
- package/dist/ui/prompts.d.ts.map +1 -0
- package/dist/ui/prompts.js +295 -0
- package/dist/ui/prompts.js.map +1 -0
- package/dist/ui/spinner.d.ts +112 -0
- package/dist/ui/spinner.d.ts.map +1 -0
- package/dist/ui/spinner.js +229 -0
- package/dist/ui/spinner.js.map +1 -0
- package/dist/utils/backup.d.ts +48 -0
- package/dist/utils/backup.d.ts.map +1 -0
- package/dist/utils/backup.js +182 -0
- package/dist/utils/backup.js.map +1 -0
- package/dist/utils/config.d.ts +80 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +221 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/os.d.ts +45 -0
- package/dist/utils/os.d.ts.map +1 -0
- package/dist/utils/os.js +106 -0
- package/dist/utils/os.js.map +1 -0
- package/dist/utils/paths.d.ts +38 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +160 -0
- package/dist/utils/paths.js.map +1 -0
- package/docs/PRD-BILLING.md +226 -0
- package/docs/PRD-EARN-SYSTEM.md +261 -0
- package/docs/PRD-MCP-AUTO-SETUP.md +623 -0
- package/docs/enterprise-deployment.md +728 -0
- package/landing/next.config.mjs +14 -0
- package/landing/public/book/index.html +24 -5
- package/landing/public/demo-product.jpg +0 -0
- package/landing/public/stats.json +4 -2
- package/landing/scripts/generate-stats.js +13 -0
- package/landing/src/app/api/og/route.tsx +1 -3
- package/landing/src/app/api/workspace-auth/magic-link/route.ts +6 -3
- package/landing/src/app/auth/verify/page.tsx +11 -4
- package/landing/src/app/docs/page.tsx +1 -1
- package/landing/src/app/join/page.tsx +49 -0
- package/landing/src/app/layout.tsx +1 -1
- package/landing/src/app/login/page.tsx +7 -1
- package/landing/src/app/page.tsx +50 -38
- package/landing/src/app/providers/register/page.tsx +1 -1
- package/landing/src/app/workspace/page.tsx +484 -806
- package/landing/src/components/CheckoutButton.tsx +1 -1
- package/landing/src/components/EarnCreditsTab.tsx +842 -0
- package/landing/src/components/HeroTabs.tsx +2 -2
- package/landing/src/components/demo/PhoneDemo.tsx +423 -0
- package/landing/src/components/demo/index.ts +1 -0
- package/landing/src/lib/stats.json +3 -1
- package/landing/tailwind.config.ts +10 -0
- package/package.json +9 -2
- package/src/adapters/base.ts +363 -0
- package/src/adapters/claude-desktop.ts +41 -0
- package/src/adapters/cline.ts +88 -0
- package/src/adapters/continue.ts +91 -0
- package/src/adapters/cursor.ts +43 -0
- package/src/adapters/custom.ts +188 -0
- package/src/adapters/detect.ts +202 -0
- package/src/adapters/index.ts +47 -0
- package/src/adapters/windsurf.ts +44 -0
- package/src/bin.ts +19 -0
- package/src/cli/commands/doctor.ts +367 -0
- package/src/cli/commands/index.ts +9 -0
- package/src/cli/commands/mcp-install.ts +291 -0
- package/src/cli/commands/restore.ts +333 -0
- package/src/cli/commands/setup.ts +276 -0
- package/src/cli/commands/uninstall.ts +240 -0
- package/src/cli/index.ts +116 -0
- package/src/discovery.ts +328 -3
- package/src/enterprise/env.ts +156 -0
- package/src/enterprise/index.ts +7 -0
- package/src/enterprise/script-generator.ts +481 -0
- package/src/execute.ts +256 -0
- package/src/index.ts +85 -7
- package/src/stripe.ts +1 -1
- package/src/types.ts +32 -0
- package/src/ui/colors.ts +219 -0
- package/src/ui/errors.ts +394 -0
- package/src/ui/index.ts +17 -0
- package/src/ui/prompts.ts +390 -0
- package/src/ui/spinner.ts +325 -0
- package/src/utils/backup.ts +224 -0
- package/src/utils/config.ts +315 -0
- package/src/utils/os.ts +124 -0
- package/src/utils/paths.ts +203 -0
- package/STATUS.md +0 -160
- package/landing/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Path Resolver
|
|
3
|
+
* Resolves config file paths for all MCP clients across all operating systems
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
import { detectOS, getHomeDir, getAppDataDir, getUserProfileDir, Platform } from './os.js';
|
|
8
|
+
|
|
9
|
+
export type MCPClient =
|
|
10
|
+
| 'claude-desktop'
|
|
11
|
+
| 'cursor'
|
|
12
|
+
| 'windsurf'
|
|
13
|
+
| 'cline'
|
|
14
|
+
| 'continue';
|
|
15
|
+
|
|
16
|
+
export interface ClientPathConfig {
|
|
17
|
+
name: string;
|
|
18
|
+
displayName: string;
|
|
19
|
+
configPath: string;
|
|
20
|
+
configDir: string;
|
|
21
|
+
configFile: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Get config path for Claude Desktop
|
|
26
|
+
*/
|
|
27
|
+
function getClaudeDesktopPath(os: Platform): string {
|
|
28
|
+
const home = getHomeDir();
|
|
29
|
+
const appData = getAppDataDir();
|
|
30
|
+
|
|
31
|
+
switch (os) {
|
|
32
|
+
case 'mac':
|
|
33
|
+
return join(appData, 'Claude', 'claude_desktop_config.json');
|
|
34
|
+
case 'win':
|
|
35
|
+
return join(appData, 'Claude', 'claude_desktop_config.json');
|
|
36
|
+
case 'linux':
|
|
37
|
+
return join(home, '.config', 'Claude', 'claude_desktop_config.json');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Get config path for Cursor
|
|
43
|
+
*/
|
|
44
|
+
function getCursorPath(os: Platform): string {
|
|
45
|
+
const home = getHomeDir();
|
|
46
|
+
const appData = getAppDataDir();
|
|
47
|
+
|
|
48
|
+
switch (os) {
|
|
49
|
+
case 'mac':
|
|
50
|
+
return join(appData, 'Cursor', 'User', 'globalStorage', 'cursor.mcp', 'config.json');
|
|
51
|
+
case 'win':
|
|
52
|
+
return join(appData, 'Cursor', 'User', 'globalStorage', 'cursor.mcp', 'config.json');
|
|
53
|
+
case 'linux':
|
|
54
|
+
return join(home, '.config', 'Cursor', 'User', 'globalStorage', 'cursor.mcp', 'config.json');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Get config path for Windsurf
|
|
60
|
+
*/
|
|
61
|
+
function getWindsurfPath(os: Platform): string {
|
|
62
|
+
const home = getHomeDir();
|
|
63
|
+
const userProfile = getUserProfileDir();
|
|
64
|
+
|
|
65
|
+
switch (os) {
|
|
66
|
+
case 'mac':
|
|
67
|
+
case 'linux':
|
|
68
|
+
return join(home, '.codeium', 'windsurf', 'mcp_config.json');
|
|
69
|
+
case 'win':
|
|
70
|
+
return join(userProfile, '.codeium', 'windsurf', 'mcp_config.json');
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Get config path for Cline (VS Code extension)
|
|
76
|
+
*/
|
|
77
|
+
function getClinePath(os: Platform): string {
|
|
78
|
+
const home = getHomeDir();
|
|
79
|
+
const appData = getAppDataDir();
|
|
80
|
+
|
|
81
|
+
const relativePath = join(
|
|
82
|
+
'Code', 'User', 'globalStorage',
|
|
83
|
+
'saoudrizwan.claude-dev', 'settings',
|
|
84
|
+
'cline_mcp_settings.json'
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
switch (os) {
|
|
88
|
+
case 'mac':
|
|
89
|
+
return join(appData, relativePath);
|
|
90
|
+
case 'win':
|
|
91
|
+
return join(appData, relativePath);
|
|
92
|
+
case 'linux':
|
|
93
|
+
return join(home, '.config', relativePath);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Get config path for Continue
|
|
99
|
+
*/
|
|
100
|
+
function getContinuePath(os: Platform): string {
|
|
101
|
+
const home = getHomeDir();
|
|
102
|
+
const userProfile = getUserProfileDir();
|
|
103
|
+
|
|
104
|
+
switch (os) {
|
|
105
|
+
case 'mac':
|
|
106
|
+
case 'linux':
|
|
107
|
+
return join(home, '.continue', 'config.json');
|
|
108
|
+
case 'win':
|
|
109
|
+
return join(userProfile, '.continue', 'config.json');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Get the config path for a specific MCP client
|
|
115
|
+
*/
|
|
116
|
+
export function getConfigPath(client: MCPClient, os?: Platform): string {
|
|
117
|
+
const currentOS = os || detectOS();
|
|
118
|
+
|
|
119
|
+
switch (client) {
|
|
120
|
+
case 'claude-desktop':
|
|
121
|
+
return getClaudeDesktopPath(currentOS);
|
|
122
|
+
case 'cursor':
|
|
123
|
+
return getCursorPath(currentOS);
|
|
124
|
+
case 'windsurf':
|
|
125
|
+
return getWindsurfPath(currentOS);
|
|
126
|
+
case 'cline':
|
|
127
|
+
return getClinePath(currentOS);
|
|
128
|
+
case 'continue':
|
|
129
|
+
return getContinuePath(currentOS);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Get full client configuration info
|
|
135
|
+
*/
|
|
136
|
+
export function getClientConfig(client: MCPClient, os?: Platform): ClientPathConfig {
|
|
137
|
+
const configPath = getConfigPath(client, os);
|
|
138
|
+
const pathParts = configPath.split(/[/\\]/);
|
|
139
|
+
const configFile = pathParts.pop() || '';
|
|
140
|
+
const configDir = pathParts.join('/');
|
|
141
|
+
|
|
142
|
+
const displayNames: Record<MCPClient, string> = {
|
|
143
|
+
'claude-desktop': 'Claude Desktop',
|
|
144
|
+
'cursor': 'Cursor',
|
|
145
|
+
'windsurf': 'Windsurf',
|
|
146
|
+
'cline': 'Cline',
|
|
147
|
+
'continue': 'Continue',
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
return {
|
|
151
|
+
name: client,
|
|
152
|
+
displayName: displayNames[client],
|
|
153
|
+
configPath,
|
|
154
|
+
configDir,
|
|
155
|
+
configFile,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Get all supported MCP clients
|
|
161
|
+
*/
|
|
162
|
+
export function getAllClients(): MCPClient[] {
|
|
163
|
+
return ['claude-desktop', 'cursor', 'windsurf', 'cline', 'continue'];
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Get config paths for all clients
|
|
168
|
+
*/
|
|
169
|
+
export function getAllConfigPaths(os?: Platform): Map<MCPClient, ClientPathConfig> {
|
|
170
|
+
const paths = new Map<MCPClient, ClientPathConfig>();
|
|
171
|
+
|
|
172
|
+
for (const client of getAllClients()) {
|
|
173
|
+
paths.set(client, getClientConfig(client, os));
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
return paths;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Validate that a client name is valid
|
|
181
|
+
*/
|
|
182
|
+
export function isValidClient(client: string): client is MCPClient {
|
|
183
|
+
return getAllClients().includes(client as MCPClient);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Parse client argument (accepts various formats)
|
|
188
|
+
*/
|
|
189
|
+
export function parseClientArg(arg: string): MCPClient | null {
|
|
190
|
+
const normalized = arg.toLowerCase().replace(/[_\s]/g, '-');
|
|
191
|
+
|
|
192
|
+
const aliases: Record<string, MCPClient> = {
|
|
193
|
+
'claude': 'claude-desktop',
|
|
194
|
+
'claude-desktop': 'claude-desktop',
|
|
195
|
+
'claudedesktop': 'claude-desktop',
|
|
196
|
+
'cursor': 'cursor',
|
|
197
|
+
'windsurf': 'windsurf',
|
|
198
|
+
'cline': 'cline',
|
|
199
|
+
'continue': 'continue',
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
return aliases[normalized] || null;
|
|
203
|
+
}
|
package/STATUS.md
DELETED
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
# APIClaw Status — Verifierad 26 Feb 2026, 18:50 CET
|
|
2
|
-
|
|
3
|
-
> **Denna fil är source of truth.** Uppdatera vid varje deploy/ändring.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 🚀 SENASTE NYTT
|
|
8
|
-
|
|
9
|
-
### Launch Meeting (26 feb 2026)
|
|
10
|
-
- **Pitch till Ismael från Launch** — gick bra!
|
|
11
|
-
- **Live demo fungerade perfekt:**
|
|
12
|
-
- Skapade NordSym Echo API live i browsern
|
|
13
|
-
- Konfigurerade Direct Call med Vercel endpoint
|
|
14
|
-
- Whisper-transkribering via Replicate bevisade proxy-konceptet
|
|
15
|
-
- **Key reactions:**
|
|
16
|
-
- "Wow" när vi visade tillväxt från 1,400 → 16,000 APIs
|
|
17
|
-
- Ismael log när Gustav sa "building for agents"
|
|
18
|
-
- Enades om att "API is the missing piece" för agenter
|
|
19
|
-
- **Mötet filmades** — demo med Symbot dokumenterad
|
|
20
|
-
- **Väntar på respons nästa vecka**
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## 📊 Snabbstatus
|
|
25
|
-
|
|
26
|
-
| Komponent | Status | Detaljer |
|
|
27
|
-
|-----------|--------|----------|
|
|
28
|
-
| **npm** | ✅ Live | `@nordsym/apiclaw` |
|
|
29
|
-
| **Landing** | ✅ Live | https://apiclaw.nordsym.com |
|
|
30
|
-
| **Convex** | ✅ Deployat | `adventurous-avocet-799` |
|
|
31
|
-
| **API Registry** | ✅ 5,616 | Live-data från landing |
|
|
32
|
-
| **Direct Call** | ✅ 11 providers | Replicate, OpenRouter, ElevenLabs, m.fl. |
|
|
33
|
-
| **Provider Dashboard** | ✅ Live | Self-service onboarding fungerar |
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## ⚡ Direct Call Providers (11 st)
|
|
38
|
-
|
|
39
|
-
| Provider | Capability | Status |
|
|
40
|
-
|----------|-----------|--------|
|
|
41
|
-
| Replicate | Whisper, Stable Diffusion, 1000+ ML models | ✅ Live |
|
|
42
|
-
| OpenRouter | GPT-4, Claude, Llama, 100+ LLMs | ✅ Live |
|
|
43
|
-
| ElevenLabs | Text-to-speech i 29 språk | ✅ Live |
|
|
44
|
-
| 46elks | SMS i Sverige och globalt | ✅ Live |
|
|
45
|
-
| Twilio | Enterprise SMS och voice | ✅ Live |
|
|
46
|
-
| Resend | Modern email API | ✅ Live |
|
|
47
|
-
| Brave Search | Privacy-focused web search | ✅ Live |
|
|
48
|
-
| Firecrawl | Web scraping till LLM-ready markdown | ✅ Live |
|
|
49
|
-
| E2B | Secure cloud sandboxes för kod | ✅ Live |
|
|
50
|
-
| GitHub | Repos, issues, PRs | ✅ Live |
|
|
51
|
-
| CoinGecko | Crypto priser och market data | ✅ Live |
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
## 🎯 Pitch Points (för samtal med investerare/partners)
|
|
56
|
-
|
|
57
|
-
**One-liner:** "The API layer for AI agents"
|
|
58
|
-
|
|
59
|
-
**Problem:**
|
|
60
|
-
- Agenter har inget ställe att hitta, jämföra och utvärdera API:er
|
|
61
|
-
- Providers kan inte nå agenter snabbt nog — allt gammalt är byggt för människor
|
|
62
|
-
|
|
63
|
-
**Solution:**
|
|
64
|
-
- MCP server som ger agenter instant access till API-lagret
|
|
65
|
-
- 5,600+ APIs indexerade för discovery
|
|
66
|
-
- Direct Call — vi proxar requests så agenter slipper hantera API-nycklar
|
|
67
|
-
|
|
68
|
-
**Traction:**
|
|
69
|
-
- 16,980 APIs indexerade
|
|
70
|
-
- 865 open APIs
|
|
71
|
-
- 11 Direct Call providers
|
|
72
|
-
- 2 partnerships signerade (46elks, CoAccept)
|
|
73
|
-
|
|
74
|
-
**Business model:**
|
|
75
|
-
- Free discovery
|
|
76
|
-
- Direct Call är pay-per-use — vi tar marginal på proxade requests
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
## 🔧 Provider Dashboard
|
|
81
|
-
|
|
82
|
-
**URL:** https://apiclaw.nordsym.com/providers/dashboard
|
|
83
|
-
|
|
84
|
-
**Fungerar:**
|
|
85
|
-
- Email magic link login
|
|
86
|
-
- Skapa provider-konto
|
|
87
|
-
- Lista nya API:er (4-stegs wizard)
|
|
88
|
-
- Konfigurera Direct Call (base URL, auth, rate limits)
|
|
89
|
-
- Se analytics (preview)
|
|
90
|
-
|
|
91
|
-
**Demo-flow (bevisat live):**
|
|
92
|
-
1. Logga in som NordSym AB
|
|
93
|
-
2. Klicka "Add API"
|
|
94
|
-
3. Fyll i namn, beskrivning, kategori, pricing
|
|
95
|
-
4. Submit → "You're Listed!"
|
|
96
|
-
5. Gå till Direct Call tab
|
|
97
|
-
6. Konfigurera endpoint + auth
|
|
98
|
-
7. Sätt status till Live
|
|
99
|
-
8. Verifiera med curl
|
|
100
|
-
|
|
101
|
-
---
|
|
102
|
-
|
|
103
|
-
## 📁 Projektstruktur
|
|
104
|
-
|
|
105
|
-
```
|
|
106
|
-
apiclaw/
|
|
107
|
-
├── src/ # MCP Server (TypeScript)
|
|
108
|
-
│ ├── index.ts # Huvudfil, MCP tool definitions
|
|
109
|
-
│ ├── discovery.ts # Söklogik
|
|
110
|
-
│ ├── execute.ts # Direct Call handlers
|
|
111
|
-
│ └── registry/
|
|
112
|
-
│ └── apis.json # API registry
|
|
113
|
-
│
|
|
114
|
-
├── landing/ # Next.js frontend
|
|
115
|
-
│ └── src/app/
|
|
116
|
-
│ ├── page.tsx # Homepage
|
|
117
|
-
│ ├── providers/ # Provider-portal
|
|
118
|
-
│ └── admin/ # Admin-panel
|
|
119
|
-
│
|
|
120
|
-
├── convex/ # Backend
|
|
121
|
-
│ ├── schema.ts # Databasschema
|
|
122
|
-
│ ├── providers.ts # Provider CRUD
|
|
123
|
-
│ └── credits.ts # Credits
|
|
124
|
-
│
|
|
125
|
-
├── dist/ # Kompilerad JS
|
|
126
|
-
└── STATUS.md # DENNA FIL
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
---
|
|
130
|
-
|
|
131
|
-
## 📈 Roadmap
|
|
132
|
-
|
|
133
|
-
**Nu (Q1 2026):**
|
|
134
|
-
- ✅ 16k+ APIs
|
|
135
|
-
- ✅ Direct Call fungerar
|
|
136
|
-
- ✅ Provider self-service
|
|
137
|
-
- ⏳ Launch respons (nästa vecka)
|
|
138
|
-
|
|
139
|
-
**Nästa:**
|
|
140
|
-
- Fler Direct Call partnerships
|
|
141
|
-
- Stripe payments live
|
|
142
|
-
- Usage analytics för providers
|
|
143
|
-
|
|
144
|
-
---
|
|
145
|
-
|
|
146
|
-
## 📝 Ändringslogg
|
|
147
|
-
|
|
148
|
-
| Datum | Ändring |
|
|
149
|
-
|-------|---------|
|
|
150
|
-
| 2026-02-26 | 🎉 **Launch pitch genomförd!** Demo fungerade perfekt |
|
|
151
|
-
| 2026-02-26 | NordSym Echo API skapad + Direct Call konfigurerat live |
|
|
152
|
-
| 2026-02-26 | Whisper-transkribering via Replicate bevisade proxy-konceptet |
|
|
153
|
-
| 2026-02-26 | Provider dashboard delete-funktion tillagd |
|
|
154
|
-
| 2026-02-26 | Direct Call modal på landningssidan (klicka på "11" för att se alla) |
|
|
155
|
-
| 2026-02-22 | 15,000 APIs milestone |
|
|
156
|
-
| 2026-02-16 | npm v1.0.0 publicerad |
|
|
157
|
-
|
|
158
|
-
---
|
|
159
|
-
|
|
160
|
-
*Senast verifierad: 26 Feb 2026, kl 18:50 CET*
|