@apitap/core 1.6.3 → 1.6.4
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 +166 -69
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,29 +1,31 @@
|
|
|
1
1
|
# ApiTap
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@apitap/core)
|
|
4
|
-
[](https://github.com/n1byn1kt/apitap)
|
|
5
5
|
[](./LICENSE)
|
|
6
6
|
|
|
7
7
|
**The MCP server that turns any website into an API — no docs, no SDK, no browser.**
|
|
8
8
|
|
|
9
|
-
ApiTap is an MCP server that lets AI agents browse the web through APIs instead of browsers.
|
|
9
|
+
ApiTap is an MCP server that lets AI agents browse the web through APIs instead of browsers. It ships with **6,400+ pre-mapped endpoints** across 280+ APIs (Stripe, GitHub, Twilio, Slack, Spotify, and more) — ready to query on install. For sites not in the database, it captures API traffic from any website, generates reusable "skill files," and replays them directly with `fetch()`. No DOM, no selectors, no flaky waits. Token costs drop 20-100x compared to browser automation.
|
|
10
10
|
|
|
11
11
|
The web was built for human eyes; ApiTap makes it native to machines.
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
#
|
|
15
|
-
apitap
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
# Import 280+ APIs instantly — no browser needed
|
|
15
|
+
apitap import --from apis-guru --limit 100
|
|
16
|
+
Done: 87 imported, 3 failed, 10 skipped
|
|
17
|
+
1,847 endpoints added across 87 APIs
|
|
18
18
|
|
|
19
|
-
#
|
|
19
|
+
# Replay any imported endpoint immediately
|
|
20
|
+
apitap replay api.stripe.com get-listcharges limit=5
|
|
21
|
+
|
|
22
|
+
# Or capture a site's private API
|
|
23
|
+
apitap capture https://polymarket.com
|
|
24
|
+
apitap replay gamma-api.polymarket.com get-events
|
|
25
|
+
|
|
26
|
+
# Or read content directly
|
|
20
27
|
apitap read https://en.wikipedia.org/wiki/Node.js
|
|
21
28
|
✓ Wikipedia decoder: ~127 tokens (vs ~4,900 raw HTML)
|
|
22
|
-
|
|
23
|
-
# Or step by step:
|
|
24
|
-
apitap capture https://polymarket.com # Watch API traffic
|
|
25
|
-
apitap show gamma-api.polymarket.com # See what was captured
|
|
26
|
-
apitap replay gamma-api.polymarket.com get-events # Call the API directly
|
|
27
29
|
```
|
|
28
30
|
|
|
29
31
|
No scraping. No browser. Just the API.
|
|
@@ -34,17 +36,35 @@ No scraping. No browser. Just the API.
|
|
|
34
36
|
|
|
35
37
|
## How It Works
|
|
36
38
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
ApiTap has three ways to build its API knowledge:
|
|
40
|
+
|
|
41
|
+
1. **Import** (instant) — Import OpenAPI/Swagger specs from the [APIs.guru](https://apis.guru) directory of 2,500+ public APIs, or from any spec URL/file. Endpoints get a confidence score based on spec quality. No browser needed.
|
|
42
|
+
2. **Capture** (30 seconds) — Launch a browser, visit a site, browse normally. ApiTap intercepts all network traffic via CDP, filters noise, and generates a skill file. Or use `apitap attach` to capture from your already-running Chrome.
|
|
43
|
+
3. **Discover** (automatic) — ApiTap auto-detects frameworks (WordPress, Next.js, Shopify) and probes for OpenAPI specs at common paths. Works without a browser.
|
|
44
|
+
|
|
45
|
+
All three paths produce the same artifact: a **skill file** — a portable JSON map of an API's endpoints, stored at `~/.apitap/skills/`.
|
|
41
46
|
|
|
42
47
|
```
|
|
43
|
-
|
|
44
|
-
|
|
48
|
+
Import: OpenAPI spec → Converter → Merge → skill.json (confidence 0.6-0.85)
|
|
49
|
+
Capture: Browser → CDP listener → Filter → Skill Generator → skill.json (confidence 1.0)
|
|
50
|
+
Attach: Running Chrome → CDP attach → Filter → skill.json (confidence 0.8-1.0)
|
|
45
51
|
Replay: Agent → Replay Engine (skill.json) → fetch() → API → JSON response
|
|
52
|
+
↑ no browser in this path
|
|
46
53
|
```
|
|
47
54
|
|
|
55
|
+
### Confidence Model
|
|
56
|
+
|
|
57
|
+
Every endpoint tracks how it was discovered:
|
|
58
|
+
|
|
59
|
+
| Source | Confidence | Meaning |
|
|
60
|
+
|--------|-----------|---------|
|
|
61
|
+
| Captured with response body | 1.0 | Full capture — response shape verified |
|
|
62
|
+
| OpenAPI import, high quality | 0.85 | Spec has response examples |
|
|
63
|
+
| CDP skeleton (real traffic, no body) | 0.8 | Endpoint exists, body was evicted from Chrome buffer |
|
|
64
|
+
| OpenAPI import, base | 0.6 | Thin spec, no examples |
|
|
65
|
+
|
|
66
|
+
Imported endpoints auto-upgrade to confidence 1.0 on first successful replay. The merge is additive — captured data is never overwritten by imports, imports fill gaps that capture missed.
|
|
67
|
+
|
|
48
68
|
## Install
|
|
49
69
|
|
|
50
70
|
```bash
|
|
@@ -63,10 +83,50 @@ That's it. 12 MCP tools, ready to go. Requires Node.js 20+.
|
|
|
63
83
|
> ```bash
|
|
64
84
|
> npx playwright install chromium
|
|
65
85
|
> ```
|
|
66
|
-
> The `read`, `peek`, and `
|
|
86
|
+
> The `read`, `peek`, `discover`, and `import` tools work without it.
|
|
67
87
|
|
|
68
88
|
## Quick Start
|
|
69
89
|
|
|
90
|
+
### Import APIs instantly
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# Import from the APIs.guru directory (2,500+ public APIs)
|
|
94
|
+
apitap import --from apis-guru --limit 100
|
|
95
|
+
|
|
96
|
+
# Import a specific API by name
|
|
97
|
+
apitap import --from apis-guru --search stripe
|
|
98
|
+
|
|
99
|
+
# Import a single OpenAPI spec from URL
|
|
100
|
+
apitap import https://api.apis.guru/v2/specs/stripe.com/2022-11-15/openapi.json
|
|
101
|
+
|
|
102
|
+
# Import a local spec file (JSON or YAML)
|
|
103
|
+
apitap import ./my-api-spec.json
|
|
104
|
+
|
|
105
|
+
# Skip auth-required APIs (open endpoints only)
|
|
106
|
+
apitap import --from apis-guru --limit 500 --no-auth-only
|
|
107
|
+
|
|
108
|
+
# Preview what would be imported
|
|
109
|
+
apitap import --from apis-guru --search twilio --dry-run
|
|
110
|
+
|
|
111
|
+
# Update previously imported APIs (skip unchanged)
|
|
112
|
+
apitap import --from apis-guru --update
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Import produces a diff showing what changed:
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
Importing api.stripe.com from OpenAPI 3.0 spec...
|
|
119
|
+
|
|
120
|
+
✓ 12 existing captured endpoints preserved
|
|
121
|
+
+ 34 new endpoints added from OpenAPI spec
|
|
122
|
+
~ 8 endpoints enriched with spec metadata
|
|
123
|
+
· 0 skipped (already imported)
|
|
124
|
+
|
|
125
|
+
Skill file: ~/.apitap/skills/api.stripe.com.json (54 endpoints)
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Captured endpoints are never overwritten. Import fills gaps and adds metadata (descriptions, response schemas, query param enums) from the spec.
|
|
129
|
+
|
|
70
130
|
### Capture API traffic
|
|
71
131
|
|
|
72
132
|
```bash
|
|
@@ -88,7 +148,8 @@ ApiTap opens a browser window. Browse the site normally — click around, scroll
|
|
|
88
148
|
### Attach to a running Chrome
|
|
89
149
|
|
|
90
150
|
```bash
|
|
91
|
-
#
|
|
151
|
+
# Launch Chrome with remote debugging enabled
|
|
152
|
+
google-chrome --remote-debugging-port=9222
|
|
92
153
|
|
|
93
154
|
# Attach to your signed-in Chrome — captures all tabs
|
|
94
155
|
apitap attach --port 9222
|
|
@@ -99,23 +160,25 @@ apitap attach --port 9222 --domain *.github.com
|
|
|
99
160
|
# Ctrl+C to stop — generates signed skill files for each captured domain
|
|
100
161
|
```
|
|
101
162
|
|
|
102
|
-
No separate browser, no re-login. Captures from your real Chrome sessions with all your cookies and auth tokens.
|
|
163
|
+
No separate browser, no re-login. Captures from your real Chrome sessions with all your cookies and auth tokens. When response bodies are evicted from Chrome's buffer (common on high-traffic pages), skeleton endpoints are written at confidence 0.8 instead of being dropped.
|
|
103
164
|
|
|
104
|
-
### List and explore
|
|
165
|
+
### List and explore APIs
|
|
105
166
|
|
|
106
167
|
```bash
|
|
107
168
|
# List all skill files
|
|
108
169
|
apitap list
|
|
109
|
-
✓
|
|
110
|
-
✓
|
|
170
|
+
✓ api.stripe.com 446 endpoints 5m ago [imported-signed]
|
|
171
|
+
✓ gamma-api.polymarket.com 3 endpoints 2h ago [signed]
|
|
172
|
+
✓ api.github.com 499 endpoints 1h ago [imported-signed]
|
|
111
173
|
|
|
112
174
|
# Show endpoints for a domain
|
|
113
|
-
apitap show
|
|
114
|
-
[
|
|
115
|
-
[
|
|
175
|
+
apitap show api.stripe.com
|
|
176
|
+
[ ] GET /v1/account object (22 fields)
|
|
177
|
+
[ ] GET /v1/charges object (4 fields)
|
|
178
|
+
[ ] GET /v1/customers/:customer object (30 fields)
|
|
116
179
|
|
|
117
180
|
# Search across all skill files
|
|
118
|
-
apitap search
|
|
181
|
+
apitap search stripe
|
|
119
182
|
```
|
|
120
183
|
|
|
121
184
|
### Replay an endpoint
|
|
@@ -141,7 +204,7 @@ ApiTap includes a text-mode browsing pipeline — `peek` and `read` — that let
|
|
|
141
204
|
| YouTube | `youtube` | ~36 | 99% smaller |
|
|
142
205
|
| Wikipedia | `wikipedia` | ~127 | 97% smaller |
|
|
143
206
|
| Hacker News | `hackernews` | ~200 | 90% smaller |
|
|
144
|
-
| Grokipedia | `grokipedia` | ~150
|
|
207
|
+
| Grokipedia | `grokipedia` | ~150-5000+ | varies by article length |
|
|
145
208
|
| Twitter/X | `twitter` | ~80 | 95% smaller |
|
|
146
209
|
| Any other site | `generic` | varies | ~74% avg |
|
|
147
210
|
|
|
@@ -162,21 +225,35 @@ apitap read https://example.com/blog/post
|
|
|
162
225
|
|
|
163
226
|
For MCP agents, `apitap_peek` and `apitap_read` are the fastest way to consume web content — use them before reaching for `apitap_browse` or `apitap_capture`.
|
|
164
227
|
|
|
165
|
-
##
|
|
228
|
+
## Pre-Loaded APIs
|
|
166
229
|
|
|
167
|
-
ApiTap
|
|
230
|
+
ApiTap can instantly import from the [APIs.guru](https://apis.guru) directory of 2,500+ public API specs. A single command populates your local pattern database:
|
|
168
231
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
| Reddit | 2 | Green | 200 |
|
|
173
|
-
| Discord | 4 | Green | 200 |
|
|
174
|
-
| GitHub | 1 | Green | 200 |
|
|
175
|
-
| HN (Algolia) | 1 | Yellow | 200 |
|
|
176
|
-
| dev.to | 2 | Green | 200 |
|
|
177
|
-
| CoinGecko | 6 | Green | 200 |
|
|
232
|
+
```bash
|
|
233
|
+
apitap import --from apis-guru --limit 500
|
|
234
|
+
```
|
|
178
235
|
|
|
179
|
-
|
|
236
|
+
Some of the APIs available out of the box:
|
|
237
|
+
|
|
238
|
+
| API | Endpoints | Auth |
|
|
239
|
+
|-----|-----------|------|
|
|
240
|
+
| Stripe | 446 | API Key |
|
|
241
|
+
| GitHub | 499 | OAuth |
|
|
242
|
+
| Jira/Atlassian | 487 | API Key |
|
|
243
|
+
| Twilio | 199+ | API Key |
|
|
244
|
+
| Slack | 175 | OAuth |
|
|
245
|
+
| DigitalOcean | 290 | Bearer |
|
|
246
|
+
| Linode | 350 | Bearer |
|
|
247
|
+
| SendGrid | 334 | API Key |
|
|
248
|
+
| Spotify | 90 | OAuth |
|
|
249
|
+
| Square | 200 | OAuth |
|
|
250
|
+
| Plaid | 198 | API Key |
|
|
251
|
+
| Asana | 167 | Bearer |
|
|
252
|
+
| Twitter | 163 | OAuth |
|
|
253
|
+
| Vimeo | 326 | OAuth |
|
|
254
|
+
| OpenAI | 28 | API Key |
|
|
255
|
+
|
|
256
|
+
Auth-required APIs import as endpoint maps with response schemas — you can explore what's available and see response shapes before setting up credentials. First successful replay with real auth auto-upgrades the endpoint to full captured status.
|
|
180
257
|
|
|
181
258
|
## Why ApiTap?
|
|
182
259
|
|
|
@@ -186,6 +263,8 @@ ApiTap has been tested against real-world sites:
|
|
|
186
263
|
|
|
187
264
|
**Why not reverse-engineer the API manually?** You could open DevTools and copy headers by hand. ApiTap does it in 30 seconds and gives you a portable file any agent can use.
|
|
188
265
|
|
|
266
|
+
**Why not just use an OpenAPI spec?** You can! `apitap import` converts OpenAPI/Swagger specs directly into skill files. But many sites don't publish specs — ApiTap captures their APIs from live traffic.
|
|
267
|
+
|
|
189
268
|
**Isn't this just a MITM proxy?** No. ApiTap is read-only — it uses Chrome DevTools Protocol to observe responses. No certificate setup, no request modification, no code injection.
|
|
190
269
|
|
|
191
270
|
## Replayability Tiers
|
|
@@ -316,33 +395,23 @@ apitap index discord.com
|
|
|
316
395
|
|
|
317
396
|
The index lives at `~/.apitap/index.json` and is automatically read by the `apitap_discover` MCP tool — so your agents can ask "what do you know about Discord's API?" and get a useful answer without triggering a full capture.
|
|
318
397
|
|
|
319
|
-
Agents see something like:
|
|
320
|
-
|
|
321
|
-
```
|
|
322
|
-
discord.com — 8 endpoints mapped, Bearer auth, last seen 2h ago
|
|
323
|
-
GET /api/v10/channels/:id (hits: 47, JSON, paginated)
|
|
324
|
-
GET /api/v10/guilds/:id/members (hits: 12, JSON)
|
|
325
|
-
POST /api/v10/channels/:id/messages (hits: 8, JSON)
|
|
326
|
-
...
|
|
327
|
-
```
|
|
328
|
-
|
|
329
398
|
### Promoting to a Full Skill File
|
|
330
399
|
|
|
331
400
|
The index is a map — it knows what endpoints exist but not their response shapes. To get a full replayable skill file, promote a domain:
|
|
332
401
|
|
|
333
|
-
**From the popup:** Click the ApiTap icon
|
|
402
|
+
**From the popup:** Click the ApiTap icon -> find the domain -> **Generate skill file**
|
|
334
403
|
|
|
335
404
|
**Via agent:** Your agent can request a capture automatically. You'll get a notification to approve, the extension briefly attaches CDP, captures response shapes, then detaches. The full skill file saves to `~/.apitap/skills/`.
|
|
336
405
|
|
|
337
|
-
**Auto-learn (opt-in):** In the extension popup
|
|
406
|
+
**Auto-learn (opt-in):** In the extension popup -> Settings -> enable **Auto-learn**. The extension will automatically promote domains you visit frequently. Off by default.
|
|
338
407
|
|
|
339
408
|
### Manual Capture
|
|
340
409
|
|
|
341
410
|
For one-off captures without the passive index:
|
|
342
411
|
|
|
343
|
-
1. Click the ApiTap icon
|
|
412
|
+
1. Click the ApiTap icon -> **Start Capture**
|
|
344
413
|
2. Browse the site — extension records API traffic
|
|
345
|
-
3. Click **Stop**
|
|
414
|
+
3. Click **Stop** -> skill file auto-saves to `~/.apitap/skills/`
|
|
346
415
|
|
|
347
416
|
The popup shows CLI connection status and live capture stats. Auth tokens are encrypted with AES-256-GCM in session storage and automatically persisted to `~/.apitap/auth.enc` via the native host, with `[stored]` placeholders in the exported skill files.
|
|
348
417
|
|
|
@@ -377,7 +446,7 @@ Skill files are JSON documents stored at `~/.apitap/skills/<domain>.json`. They
|
|
|
377
446
|
|
|
378
447
|
```json
|
|
379
448
|
{
|
|
380
|
-
"version": 2,
|
|
449
|
+
"version": "1.2",
|
|
381
450
|
"domain": "gamma-api.polymarket.com",
|
|
382
451
|
"baseUrl": "https://gamma-api.polymarket.com",
|
|
383
452
|
"endpoints": [
|
|
@@ -387,7 +456,9 @@ Skill files are JSON documents stored at `~/.apitap/skills/<domain>.json`. They
|
|
|
387
456
|
"path": "/events",
|
|
388
457
|
"queryParams": { "limit": { "type": "string", "example": "10" } },
|
|
389
458
|
"headers": {},
|
|
390
|
-
"responseShape": { "type": "object", "fields": ["id", "title", "slug"] }
|
|
459
|
+
"responseShape": { "type": "object", "fields": ["id", "title", "slug"] },
|
|
460
|
+
"confidence": 1.0,
|
|
461
|
+
"endpointProvenance": "captured"
|
|
391
462
|
}
|
|
392
463
|
]
|
|
393
464
|
}
|
|
@@ -401,10 +472,14 @@ Skill files are portable and shareable. Auth credentials are stored separately i
|
|
|
401
472
|
# Import a skill file from someone else
|
|
402
473
|
apitap import ./reddit-skills.json
|
|
403
474
|
|
|
404
|
-
# Import
|
|
475
|
+
# Import an OpenAPI spec (JSON or YAML)
|
|
476
|
+
apitap import ./stripe-openapi.json
|
|
477
|
+
apitap import https://api.apis.guru/v2/specs/stripe.com/2022-11-15/openapi.json
|
|
478
|
+
|
|
479
|
+
# Import validates: signature check / SSRF scan / format detection / confirmation
|
|
405
480
|
```
|
|
406
481
|
|
|
407
|
-
Imported files are re-signed with your local key and
|
|
482
|
+
Imported files are re-signed with your local key. OpenAPI specs are automatically detected and converted using the same merge logic — captured endpoints are preserved, imports fill gaps.
|
|
408
483
|
|
|
409
484
|
## Security
|
|
410
485
|
|
|
@@ -418,7 +493,11 @@ ApiTap handles untrusted skill files from the internet and replays HTTP requests
|
|
|
418
493
|
- **Header injection protection** — Allowlist prevents skill files from injecting dangerous HTTP headers (`Host`, `X-Forwarded-For`, `Cookie`, `Authorization`)
|
|
419
494
|
- **Redirect validation** — Manual redirect handling with SSRF re-check prevents redirect-to-internal-IP attacks
|
|
420
495
|
- **DNS rebinding prevention** — Resolved IPs are pinned to prevent TOCTOU attacks where DNS returns different IPs on second lookup
|
|
421
|
-
- **Skill signing** — HMAC-SHA256 signatures detect tampering;
|
|
496
|
+
- **Skill signing** — HMAC-SHA256 signatures detect tampering; four-state provenance tracking (self/imported/imported-signed/unsigned)
|
|
497
|
+
- **Atomic writes** — Skill files are written to a temp file then renamed, preventing corruption from mid-write crashes
|
|
498
|
+
- **Safe JSON parsing** — Server responses parsed with `safeParseJson()` that returns raw text on malformed JSON instead of crashing
|
|
499
|
+
- **Spec fetch hardening** — OpenAPI spec imports are SSRF-validated, size-limited (10MB), timeout-limited (30s), and reject redirects
|
|
500
|
+
- **External $ref rejection** — Only local document `#/` references are resolved; `file://` and remote `$ref` pointers are blocked
|
|
422
501
|
- **No phone-home** — Everything runs locally. No external services, no telemetry
|
|
423
502
|
- **Read-only capture** — Playwright intercepts responses only. No request modification or code injection
|
|
424
503
|
|
|
@@ -432,14 +511,19 @@ Since skill files can come from anywhere — shared by colleagues, downloaded fr
|
|
|
432
511
|
|
|
433
512
|
```
|
|
434
513
|
Skill file imported
|
|
435
|
-
|
|
436
|
-
|
|
514
|
+
-> validateUrl(): block private IPs, internal hostnames, non-HTTP schemes
|
|
515
|
+
-> validateSkillFileUrls(): scan baseUrl + all endpoint example URLs
|
|
516
|
+
|
|
517
|
+
OpenAPI spec imported
|
|
518
|
+
-> resolveAndValidateUrl(): SSRF check on spec URL before fetching
|
|
519
|
+
-> resolveAndValidateUrl(): SSRF check on extracted API domain
|
|
520
|
+
-> validateSkillFile(): validate merged skill file before writing
|
|
437
521
|
|
|
438
522
|
Endpoint replayed
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
523
|
+
-> resolveAndValidateUrl(): DNS lookup + verify resolved IP isn't private
|
|
524
|
+
-> IP pinning: fetch uses resolved IP directly (prevents DNS rebinding)
|
|
525
|
+
-> Header filtering: strip dangerous headers from skill file
|
|
526
|
+
-> Redirect check: if server redirects, validate new target before following
|
|
443
527
|
```
|
|
444
528
|
|
|
445
529
|
**Blocked ranges:** `127.0.0.0/8`, `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`, `169.254.0.0/16` (cloud metadata), `100.64.0.0/10` (CGNAT/Tailscale), `198.18.0.0/15` (benchmarking), `240.0.0.0/4` (reserved), `0.0.0.0`, IPv6 equivalents (`::1`, `fe80::/10`, `fc00::/7`, `::ffff:` mapped addresses), `localhost`, `.local`, `.internal`, `file://`, `javascript:` schemes. Alternative IP representations (decimal integer, octal, hex) are normalized before checking.
|
|
@@ -460,11 +544,12 @@ All commands support `--json` for machine-readable output.
|
|
|
460
544
|
| `apitap discover <url>` | Detect APIs without launching a browser |
|
|
461
545
|
| `apitap capture <url>` | Capture API traffic from a website |
|
|
462
546
|
| `apitap attach --port <port>` | Attach to running Chrome and capture API traffic |
|
|
547
|
+
| `apitap import <url-or-file>` | Import OpenAPI spec or skill file |
|
|
548
|
+
| `apitap import --from apis-guru` | Bulk import from APIs.guru directory |
|
|
463
549
|
| `apitap list` | List available skill files |
|
|
464
550
|
| `apitap show <domain>` | Show endpoints for a domain |
|
|
465
551
|
| `apitap search <query>` | Search skill files by domain or endpoint |
|
|
466
552
|
| `apitap replay <domain> <id> [key=val...]` | Replay an API endpoint |
|
|
467
|
-
| `apitap import <file>` | Import a skill file with safety validation |
|
|
468
553
|
| `apitap refresh <domain>` | Refresh auth tokens via browser |
|
|
469
554
|
| `apitap auth [domain]` | View or manage stored auth |
|
|
470
555
|
| `apitap serve <domain>` | Serve a skill file as an MCP server |
|
|
@@ -475,6 +560,18 @@ All commands support `--json` for machine-readable output.
|
|
|
475
560
|
| `apitap forget <domain>` | Remove skill file and credentials for a domain |
|
|
476
561
|
| `apitap --version` | Print version |
|
|
477
562
|
|
|
563
|
+
### Import flags
|
|
564
|
+
|
|
565
|
+
| Flag | Description |
|
|
566
|
+
|------|-------------|
|
|
567
|
+
| `--from apis-guru` | Bulk import from APIs.guru directory |
|
|
568
|
+
| `--search <query>` | Filter APIs.guru by provider or title |
|
|
569
|
+
| `--limit <N>` | Max APIs to import (default: 100) |
|
|
570
|
+
| `--no-auth-only` | Skip APIs requiring authentication |
|
|
571
|
+
| `--dry-run` | Show what would be imported without writing |
|
|
572
|
+
| `--update` | Skip APIs unchanged since last import |
|
|
573
|
+
| `--force` | Always reimport regardless of history |
|
|
574
|
+
|
|
478
575
|
### Capture flags
|
|
479
576
|
|
|
480
577
|
| Flag | Description |
|
|
@@ -495,7 +592,7 @@ All commands support `--json` for machine-readable output.
|
|
|
495
592
|
git clone https://github.com/n1byn1kt/apitap.git
|
|
496
593
|
cd apitap
|
|
497
594
|
npm install
|
|
498
|
-
npm test # ~
|
|
595
|
+
npm test # ~1299 tests, Node built-in test runner
|
|
499
596
|
npm run typecheck # Type checking
|
|
500
597
|
npm run build # Compile to dist/
|
|
501
598
|
npx tsx src/cli.ts capture <url> # Run from source
|
|
@@ -503,7 +600,7 @@ npx tsx src/cli.ts capture <url> # Run from source
|
|
|
503
600
|
|
|
504
601
|
## Contact
|
|
505
602
|
|
|
506
|
-
Questions, feedback, or issues?
|
|
603
|
+
Questions, feedback, or issues? -> **[hello@apitap.io](mailto:hello@apitap.io)**
|
|
507
604
|
|
|
508
605
|
## License
|
|
509
606
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@apitap/core",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.4",
|
|
4
4
|
"description": "Intercept web API traffic during browsing. Generate portable skill files so AI agents can call APIs directly instead of scraping.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|