socialcrawl-mcp 1.4.0 → 1.5.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 CHANGED
@@ -2,12 +2,12 @@
2
2
 
3
3
  # socialcrawl-mcp
4
4
 
5
- **Give your AI agent access to 39 platforms — social media, commerce & product reviews, app stores, places & travel, business reputation, web research, prediction markets, and a universal cross-platform meta-search — through a single API**
5
+ **Give your AI agent access to 42 platforms — social media, commerce & product reviews, app stores, places & travel, business reputation, web research, prediction markets, cross-platform Prism composites, and a universal cross-platform meta-search — through a single API**
6
6
 
7
7
  [![npm](https://img.shields.io/npm/v/socialcrawl-mcp?style=flat-square&color=blue)](https://www.npmjs.com/package/socialcrawl-mcp)
8
8
  [![MCP Registry](https://img.shields.io/badge/MCP_Registry-listed-green?style=flat-square)](https://registry.modelcontextprotocol.io)
9
- [![Platforms](https://img.shields.io/badge/Platforms-39-blue?style=flat-square)](https://socialcrawl.dev)
10
- [![Endpoints](https://img.shields.io/badge/Endpoints-221-green?style=flat-square)](https://socialcrawl.dev/docs)
9
+ [![Platforms](https://img.shields.io/badge/Platforms-42-blue?style=flat-square)](https://socialcrawl.dev)
10
+ [![Endpoints](https://img.shields.io/badge/Endpoints-264-green?style=flat-square)](https://socialcrawl.dev/docs)
11
11
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow?style=flat-square)](LICENSE)
12
12
  [![mcp MCP server](https://glama.ai/mcp/servers/socialcrawl/mcp/badges/score.svg)](https://glama.ai/mcp/servers/socialcrawl/mcp)
13
13
 
@@ -23,9 +23,11 @@
23
23
 
24
24
  ## Overview
25
25
 
26
- `socialcrawl-mcp` is an [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that connects AI agents to the [SocialCrawl API](https://socialcrawl.dev) — a unified data API covering 39 platforms and 221 endpoints.
26
+ `socialcrawl-mcp` is an [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that connects AI agents to the [SocialCrawl API](https://socialcrawl.dev) — a unified data API covering 42 platforms and 264 endpoints.
27
27
 
28
- Retrieve profiles, posts, comments, search results, trending content, and analytics from TikTok, Instagram, YouTube, Twitter/X, LinkedIn, Reddit, GitHub, Hacker News, Polymarket, and 30 more platforms. Pull products, reviews, and sellers from Amazon and Google Shopping; apps, charts, and reviews from Google Play and the Apple App Store; places, hotels, and traveler reviews from Tripadvisor and Google Business; brand reputation from Trustpilot; Korean search across 11 Naver corpora; cross-web brand mentions with sentiment via Content Analysis — plus web research via Tavily and Perplexity, AI-powered X search via Grok, and a single `/search/everywhere` endpoint that fans out across 12+ sources in one call. One API key, one consistent response format, every platform.
28
+ Retrieve profiles, posts, comments, search results, trending content, and analytics from TikTok, Instagram, YouTube, Twitter/X, LinkedIn, Reddit, GitHub, Hacker News, Polymarket, and 30 more platforms. Pull products, reviews, and sellers from Amazon and Google Shopping; apps, charts, and reviews from Google Play and the Apple App Store; places, hotels, and traveler reviews from Tripadvisor and Google Business; brand reputation from Trustpilot; Korean search across 11 Naver corpora; cross-web brand mentions with sentiment via Content Analysis; Google News headlines and Google Finance quotes — plus web research via Tavily and Perplexity, AI-powered X search via Grok, and a single `/search/everywhere` endpoint that fans out across 12+ sources in one call.
29
+
30
+ New in this release: the **Prism** family — 30 server-side composite endpoints that fan out across many platforms and fold the results into one report (universal URL `lookup`, full `comments` harvesting, cross-source `reputation`, `share-of-voice`, brand-mention and consumer-demand nowcasts, AI consensus `answers`, crisis radar, creator vetting, and video/app/product intelligence). One API key, one consistent response format, every platform.
29
31
 
30
32
  **What the MCP server does:**
31
33
  - Discovers available platforms and endpoints dynamically
@@ -224,17 +226,22 @@ Every response follows a unified envelope format:
224
226
 
225
227
  ## Available Tools
226
228
 
227
- The MCP server exposes 5 tools:
229
+ The MCP server exposes 6 tools:
228
230
 
229
231
  | Tool | Description | Needs API key? |
230
232
  |------|-------------|----------------|
231
- | `socialcrawl_list_platforms` | Discover all 39 platforms with their endpoints and capabilities | No |
233
+ | `socialcrawl_list_platforms` | Discover all 42 platforms with their endpoints and capabilities | No |
232
234
  | `socialcrawl_list_endpoints` | See all endpoints, required parameters, and credit costs for a platform | No |
233
- | `socialcrawl_request` | Make any SocialCrawl API call — profiles, posts, comments, search, analytics. Supports an optional `idempotencyKey` for retry-safe calls. | Yes |
235
+ | `socialcrawl_request` | Make any SocialCrawl API call — profiles, posts, comments, search, analytics, Prism composites. Supports an optional `idempotencyKey` for retry-safe calls. | Yes |
234
236
  | `socialcrawl_check_balance` | Check remaining credits and recent deduction summary. Calls `/v1/credits/balance` — costs 0 credits. | Yes |
237
+ | `socialcrawl_monitors` | Create and manage stateful monitors that re-run any recipe on a cadence, deliver results to a signed webhook, and accumulate a time-series. Actions: create, list, get, runs, timeseries, pause, resume, delete. | Yes |
235
238
  | `socialcrawl_get_docs` | Access detailed API documentation by topic or platform | No |
236
239
 
237
- Three of the five tools work without an API key — they query local bundled data. `socialcrawl_request` and `socialcrawl_check_balance` require a key.
240
+ Three of the six tools work without an API key — they query local bundled data. `socialcrawl_request`, `socialcrawl_check_balance`, and `socialcrawl_monitors` require a key.
241
+
242
+ ### Monitors — schedule any recipe
243
+
244
+ `socialcrawl_monitors` wraps any registry endpoint or Prism composite in a scheduled, stateful monitor (`/v1/monitors/*`). It re-runs the recipe hourly/daily/weekly (or on a cron), delivers each result to an HMAC-signed webhook, raises alerts on metric thresholds or changes, and keeps a per-run time-series you can read back. *"Prism answers once; monitors watch it for you."* Managing monitors costs 0 credits; each scheduled run bills the recipe's normal cost plus a 1-credit scheduling premium. See `socialcrawl_get_docs` topic `monitors` for the full contract.
238
245
 
239
246
  ### Smart validation
240
247
 
@@ -248,19 +255,20 @@ Pass an `idempotencyKey` to `socialcrawl_request` (UUIDv4 recommended) to make t
248
255
 
249
256
  | Platform | Endpoints | Data Available |
250
257
  |----------|-----------|----------------|
251
- | **Facebook** | 21 | Pages, posts, comments, groups, photos, reels, events, Marketplace, transcripts, full Ad Library |
252
- | **TikTok** | 18 | Profiles, videos, comments & replies, search, trending, audience, followers, live, songs, transcripts |
253
- | **YouTube** | 16 | Channels, videos, shorts, comments & replies, sponsors, playlists, community posts, search, trending, transcripts |
254
- | **Instagram** | 15 | Profiles, posts, reels, comments, highlights, search, trending reels, audio reels, embed, transcripts |
258
+ | **Prism** | 30 | Cross-platform composites — URL lookup, comment harvesting, brand mentions, demand signals, AI visibility, crisis radar/post-mortem, reputation, share-of-voice, creator vetting, AI consensus answers, video/app/product intelligence |
259
+ | **Facebook** | 22 | Pages, posts, comments, groups, photos, reels, events, Marketplace, transcripts, full Ad Library |
260
+ | **TikTok** | 19 | Profiles, videos, comments & replies, search, trending, audience, followers, live, songs, transcripts, profile-360 |
261
+ | **YouTube** | 17 | Channels, videos, shorts, comments & replies, sponsors, playlists, community posts, search, trending, transcripts, profile-360 |
262
+ | **Instagram** | 16 | Profiles, posts, reels, comments, highlights, search, trending reels, audio reels, embed, transcripts, profile-360 |
255
263
  | **GitHub** | 12 | Users, repos, issues, PRs, READMEs, releases, search, repo dossier, user profile-velocity |
256
- | **Naver** | 11 | Korea's #1 portal — blog, news, book, encyclopedia, cafe, KiN, local, shopping, doc, image, web search |
264
+ | **Naver** | 12 | Korea's #1 portal — blog, news, book, encyclopedia, cafe, KiN, local, shopping, doc, image, web search, brief |
257
265
  | **Google** | 10 | Web search, Ads Transparency, Business Profile (info, reviews, updates, Q&A), Travel hotels |
258
266
  | **Content Analysis** | 10 | Cross-web brand mentions, sentiment, rating distributions, phrase/category trends |
267
+ | **LinkedIn** | 9 | Profiles, company pages, posts, post search, transcripts, Ad Library, profile-360 |
259
268
  | **Google Play** | 8 | App search, app details, reviews, charts, listings database, reference data |
260
269
  | **Apple App Store** | 8 | App search, app details, reviews, charts, listings database, reference data |
261
- | **LinkedIn** | 8 | Profiles, company pages, posts, post search, transcripts, Ad Library |
262
- | **Twitter/X** | 7 | Profiles, tweets, communities, video transcripts, AI search via Grok |
263
- | **Reddit** | 6 | Subreddits, posts, comments, search, transcripts |
270
+ | **Twitter/X** | 8 | Profiles, tweets, communities, video transcripts, AI search via Grok, profile-360 |
271
+ | **Reddit** | 7 | Subreddits, posts, comments, search, transcripts, omni-search VoC sweep |
264
272
  | **Spotify** | 6 | Artists, tracks, albums, podcasts, episodes, search |
265
273
  | **TikTok Shop** | 5 | Products, reviews, listings, search, creator showcases |
266
274
  | **Threads** | 5 | Profiles, posts, keyword search, user search |
@@ -274,13 +282,15 @@ Pass an `idempotencyKey` to `socialcrawl_request` (UUIDv4 recommended) to make t
274
282
  | **Truth Social** | 3 | Profiles, posts |
275
283
  | **Kwai** | 3 | Profiles, posts |
276
284
  | **Bluesky** | 3 | Profiles, posts |
285
+ | **Google Finance** | 3 | Instrument quotes, markets overview, ticker search |
277
286
  | **Trustpilot** | 2 | Business search, company reviews |
278
287
  | **Tripadvisor** | 2 | Place search, traveler reviews |
288
+ | **Universal Search** | 2 | One query fanned out across 12+ platforms (20cr); forums lane |
279
289
  | **Snapchat** | 1 | Profiles |
280
290
  | **Kick** | 1 | Clips |
281
291
  | **Perplexity** | 1 | Sonar web research with cited sources |
282
292
  | **Polymarket** | 1 | Prediction-market research — multi-query fan-out + ranking |
283
- | **Universal Search** | 1 | One query, fanned out across 12+ platforms (20cr) |
293
+ | **Google News** | 1 | Real-time Google News SERP search |
284
294
  | **Linktree** | 1 | Link pages |
285
295
  | **Linkbio** | 1 | Link pages |
286
296
  | **Linkme** | 1 | Link pages |
@@ -288,7 +298,7 @@ Pass an `idempotencyKey` to `socialcrawl_request` (UUIDv4 recommended) to make t
288
298
  | **Pillar** | 1 | Link pages |
289
299
  | **Utility** | 1 | Age & gender detection |
290
300
 
291
- **Total: 221 endpoints across 39 platforms.**
301
+ **Total: 264 endpoints across 42 platforms.**
292
302
 
293
303
  ## Error Handling
294
304
 
@@ -3,8 +3,8 @@ import { PLATFORMS, findPlatform, getAllPlatformSlugs } from "../data/platforms.
3
3
  import { ENDPOINTS, findEndpoint, getEndpointsByPlatform } from "../data/endpoints.js";
4
4
  import { getDoc, getAvailableTopics } from "../data/docs.js";
5
5
  describe("Platform data integrity", () => {
6
- it("has exactly 39 platforms", () => {
7
- expect(PLATFORMS).toHaveLength(39);
6
+ it("has exactly 42 platforms", () => {
7
+ expect(PLATFORMS).toHaveLength(42);
8
8
  });
9
9
  it("every platform has a non-empty slug, name, and description", () => {
10
10
  for (const platform of PLATFORMS) {
@@ -26,23 +26,32 @@ describe("Platform data integrity", () => {
26
26
  it("findPlatform returns undefined for unknown slug", () => {
27
27
  expect(findPlatform("nonexistent")).toBeUndefined();
28
28
  });
29
- it("getAllPlatformSlugs returns 39 slugs", () => {
30
- expect(getAllPlatformSlugs()).toHaveLength(39);
29
+ it("getAllPlatformSlugs returns 42 slugs", () => {
30
+ expect(getAllPlatformSlugs()).toHaveLength(42);
31
31
  });
32
32
  });
33
33
  describe("Endpoint data integrity", () => {
34
- it("has exactly 221 endpoints", () => {
35
- expect(ENDPOINTS.length).toBe(221);
36
- });
34
+ it("has exactly 264 endpoints", () => {
35
+ expect(ENDPOINTS.length).toBe(264);
36
+ });
37
+ // Composite (prism) recipes, the per-platform `profile/full` cards, the
38
+ // meta-search lanes (search/*), and `naver/brief` carry flat or metered
39
+ // prices that intentionally break the 1/5/10 tier ladder. Everything else
40
+ // must follow the ladder — this predicate is the single exemption seam.
41
+ const isFlatPriced = (e) => e.platform === "prism" ||
42
+ e.platform === "search" ||
43
+ e.resource === "profile/full" ||
44
+ (e.platform === "naver" && e.resource === "brief");
37
45
  it("every endpoint has required fields", () => {
38
46
  for (const endpoint of ENDPOINTS) {
39
47
  expect(endpoint.platform).toBeTruthy();
40
48
  expect(endpoint.resource).toBeTruthy();
41
49
  expect(endpoint.method).toBe("GET");
42
50
  expect(["standard", "advanced", "premium"]).toContain(endpoint.creditTier);
43
- // 20 is the flat-cost override for /v1/search/everywhere; every other
44
- // endpoint follows the standard 1/5/10 ladder.
45
- expect([1, 5, 10, 20]).toContain(endpoint.creditCost);
51
+ // Costs are non-negative integers; flat-priced composites override the
52
+ // 1/5/10 ladder (validated per-endpoint in "creditCost matches creditTier").
53
+ expect(Number.isInteger(endpoint.creditCost)).toBe(true);
54
+ expect(endpoint.creditCost).toBeGreaterThanOrEqual(0);
46
55
  expect(endpoint.archetype).toBeTruthy();
47
56
  expect(endpoint.summary).toBeTruthy();
48
57
  }
@@ -50,11 +59,9 @@ describe("Endpoint data integrity", () => {
50
59
  it("creditCost matches creditTier", () => {
51
60
  const tierCosts = { standard: 1, advanced: 5, premium: 10 };
52
61
  for (const endpoint of ENDPOINTS) {
53
- // Universal-search endpoint overrides the tier ladder with a flat 20.
54
- if (endpoint.platform === "search" && endpoint.resource === "everywhere") {
55
- expect(endpoint.creditCost).toBe(20);
62
+ // Flat-priced composites / meta-search override the tier ladder.
63
+ if (isFlatPriced(endpoint))
56
64
  continue;
57
- }
58
65
  expect(endpoint.creditCost).toBe(tierCosts[endpoint.creditTier]);
59
66
  }
60
67
  });
@@ -144,13 +151,27 @@ describe("Documentation data integrity", () => {
144
151
  it("getDoc returns undefined for unknown topic", () => {
145
152
  expect(getDoc("nonexistent")).toBeUndefined();
146
153
  });
147
- it("getAvailableTopics returns 7 fixed topics + one per platform", () => {
148
- expect(getAvailableTopics()).toHaveLength(7 + PLATFORMS.length);
154
+ it("getAvailableTopics returns 8 fixed topics + one per platform", () => {
155
+ expect(getAvailableTopics()).toHaveLength(8 + PLATFORMS.length);
149
156
  });
150
- it("getAvailableTopics includes the idempotency and pricing topics", () => {
157
+ it("getAvailableTopics includes the idempotency, monitors, and pricing topics", () => {
151
158
  expect(getAvailableTopics()).toContain("idempotency");
159
+ expect(getAvailableTopics()).toContain("monitors");
152
160
  expect(getAvailableTopics()).toContain("pricing");
153
161
  });
162
+ it("has a monitors documentation topic covering all 7 operations", () => {
163
+ const doc = getDoc("monitors");
164
+ expect(doc).toBeTruthy();
165
+ for (const op of [
166
+ "POST /v1/monitors",
167
+ "GET /v1/monitors/:id/runs",
168
+ "GET /v1/monitors/:id/timeseries",
169
+ "PATCH /v1/monitors/:id",
170
+ "DELETE /v1/monitors/:id",
171
+ ]) {
172
+ expect(doc).toContain(op);
173
+ }
174
+ });
154
175
  });
155
176
  describe("Pricing documentation", () => {
156
177
  it("has a pricing topic", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"data-integrity.test.js","sourceRoot":"","sources":["../../src/__tests__/data-integrity.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-integrity.test.js","sourceRoot":"","sources":["../../src/__tests__/data-integrity.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,128 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
+ import { monitors } from "../tools/monitors.js";
3
+ function stubFetch(status, payload) {
4
+ const cap = { url: "", method: "", headers: {} };
5
+ vi.stubGlobal("fetch", async (url, init) => {
6
+ cap.url = url;
7
+ cap.method = (init.method ?? "GET").toString();
8
+ cap.body = init.body;
9
+ cap.headers = init.headers ?? {};
10
+ return new Response(status === 204 ? null : JSON.stringify(payload), { status });
11
+ });
12
+ return () => cap;
13
+ }
14
+ describe("socialcrawl_monitors tool", () => {
15
+ const originalEnv = process.env;
16
+ beforeEach(() => {
17
+ process.env = { ...originalEnv, SOCIALCRAWL_API_KEY: "sc_test_key" };
18
+ });
19
+ afterEach(() => {
20
+ process.env = originalEnv;
21
+ vi.restoreAllMocks();
22
+ });
23
+ it("requires an API key", async () => {
24
+ delete process.env.SOCIALCRAWL_API_KEY;
25
+ const result = await monitors({ action: "list" });
26
+ expect(result).toContain("No API key configured");
27
+ });
28
+ it("create POSTs to /v1/monitors with a JSON body and maps preset cadence", async () => {
29
+ const get = stubFetch(201, { monitor: { id: "mon_1" }, webhook_secret: "whsec_x" });
30
+ const result = await monitors({
31
+ action: "create",
32
+ recipe: "prism/brand-mentions",
33
+ params: { keyword: "acme" },
34
+ cadence: "daily",
35
+ webhook_url: "https://example.com/hook",
36
+ });
37
+ const cap = get();
38
+ expect(cap.method).toBe("POST");
39
+ expect(cap.url).toContain("/v1/monitors");
40
+ expect(cap.headers["Content-Type"]).toBe("application/json");
41
+ const body = JSON.parse(cap.body);
42
+ expect(body.recipe).toBe("prism/brand-mentions");
43
+ expect(body.cadence).toBe("daily");
44
+ expect(body.params).toEqual({ keyword: "acme" });
45
+ expect(result).toContain("mon_1");
46
+ });
47
+ it("create maps a cron string to the { cron } cadence shape", async () => {
48
+ const get = stubFetch(201, { monitor: { id: "mon_2" } });
49
+ await monitors({
50
+ action: "create",
51
+ recipe: "tiktok/profile",
52
+ cadence: "0 9 * * 1",
53
+ webhook_url: "https://example.com/hook",
54
+ });
55
+ const body = JSON.parse(get().body);
56
+ expect(body.cadence).toEqual({ cron: "0 9 * * 1" });
57
+ });
58
+ it("create rejects an unknown recipe locally without calling the API", async () => {
59
+ let called = false;
60
+ vi.stubGlobal("fetch", async () => {
61
+ called = true;
62
+ return new Response("{}", { status: 200 });
63
+ });
64
+ const result = await monitors({
65
+ action: "create",
66
+ recipe: "tiktok/not-a-real-endpoint",
67
+ cadence: "daily",
68
+ webhook_url: "https://example.com/hook",
69
+ });
70
+ expect(result).toContain("Unknown recipe");
71
+ expect(called).toBe(false);
72
+ });
73
+ it("create reports missing required fields", async () => {
74
+ const result = await monitors({ action: "create", recipe: "tiktok/profile" });
75
+ expect(result).toContain("Missing required parameter");
76
+ expect(result).toContain("cadence");
77
+ expect(result).toContain("webhook_url");
78
+ });
79
+ it("id-requiring actions error without an id", async () => {
80
+ for (const action of ["get", "runs", "timeseries", "pause", "resume", "delete"]) {
81
+ const result = await monitors({ action });
82
+ expect(result).toContain("requires a monitor `id`");
83
+ }
84
+ });
85
+ it("list GETs with status/limit query params", async () => {
86
+ const get = stubFetch(200, { items: [], next_cursor: null });
87
+ await monitors({ action: "list", status: "active", limit: 50 });
88
+ const cap = get();
89
+ expect(cap.method).toBe("GET");
90
+ expect(cap.url).toContain("status=active");
91
+ expect(cap.url).toContain("limit=50");
92
+ });
93
+ it("runs GETs the nested runs path with include=result", async () => {
94
+ const get = stubFetch(200, { items: [] });
95
+ await monitors({ action: "runs", id: "mon_1", include: "result" });
96
+ const cap = get();
97
+ expect(cap.url).toContain("/v1/monitors/mon_1/runs");
98
+ expect(cap.url).toContain("include=result");
99
+ });
100
+ it("timeseries GETs the timeseries path with metric projection", async () => {
101
+ const get = stubFetch(200, { series: [] });
102
+ await monitors({ action: "timeseries", id: "mon_1", metric: "negative_share,volume" });
103
+ const cap = get();
104
+ expect(cap.url).toContain("/v1/monitors/mon_1/timeseries");
105
+ expect(cap.url).toContain("metric=");
106
+ });
107
+ it("pause and resume PATCH the right status", async () => {
108
+ const getP = stubFetch(200, { id: "mon_1", status: "paused" });
109
+ await monitors({ action: "pause", id: "mon_1" });
110
+ expect(getP().method).toBe("PATCH");
111
+ expect(JSON.parse(getP().body).status).toBe("paused");
112
+ const getR = stubFetch(200, { id: "mon_1", status: "active" });
113
+ await monitors({ action: "resume", id: "mon_1" });
114
+ expect(JSON.parse(getR().body).status).toBe("active");
115
+ });
116
+ it("delete sends DELETE and handles a 204 No Content", async () => {
117
+ const get = stubFetch(204, null);
118
+ const result = await monitors({ action: "delete", id: "mon_1" });
119
+ expect(get().method).toBe("DELETE");
120
+ expect(result).toContain("204");
121
+ });
122
+ it("surfaces a 404 not-found for an unowned monitor", async () => {
123
+ stubFetch(404, { error: { type: "RESOURCE_NOT_FOUND", message: "Monitor not found." } });
124
+ const result = await monitors({ action: "get", id: "mon_missing" });
125
+ expect(result).toContain("not found");
126
+ });
127
+ });
128
+ //# sourceMappingURL=monitors.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitors.test.js","sourceRoot":"","sources":["../../src/__tests__/monitors.test.ts"],"names":[],"mappings":"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"}
package/dist/client.d.ts CHANGED
@@ -11,4 +11,19 @@ interface RequestOptions {
11
11
  idempotencyKey?: string;
12
12
  }
13
13
  export declare function makeRequest(options: RequestOptions): Promise<string>;
14
+ interface ApiRequestOptions {
15
+ method: "GET" | "POST" | "PATCH" | "DELETE";
16
+ /** Path under the base URL, starting with a slash (e.g. "/v1/monitors"). */
17
+ path: string;
18
+ query?: Record<string, string>;
19
+ /** JSON body for POST/PATCH. Serialised with a Content-Type header. */
20
+ body?: unknown;
21
+ }
22
+ /**
23
+ * General-purpose authed request for non-registry `/v1/*` resources that the
24
+ * GET-only `makeRequest` can't express — currently the stateful monitors
25
+ * family (POST/GET/PATCH/DELETE with JSON bodies and `:id` path params).
26
+ * Shares the same x-api-key auth, timeout, error mapping, and truncation.
27
+ */
28
+ export declare function apiRequest(options: ApiRequestOptions): Promise<string>;
14
29
  export {};
package/dist/client.js CHANGED
@@ -42,6 +42,61 @@ export async function makeRequest(options) {
42
42
  clearTimeout(timeoutId);
43
43
  }
44
44
  }
45
+ /**
46
+ * General-purpose authed request for non-registry `/v1/*` resources that the
47
+ * GET-only `makeRequest` can't express — currently the stateful monitors
48
+ * family (POST/GET/PATCH/DELETE with JSON bodies and `:id` path params).
49
+ * Shares the same x-api-key auth, timeout, error mapping, and truncation.
50
+ */
51
+ export async function apiRequest(options) {
52
+ const apiKey = getApiKey();
53
+ if (!apiKey) {
54
+ return "Error: No API key configured. Set SOCIALCRAWL_API_KEY in your MCP server environment. Get a free key at socialcrawl.dev (100 credits, no credit card required).";
55
+ }
56
+ let url = `${getBaseUrl()}${options.path}`;
57
+ if (options.query && Object.keys(options.query).length > 0) {
58
+ url += `?${new URLSearchParams(options.query).toString()}`;
59
+ }
60
+ const controller = new AbortController();
61
+ const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS);
62
+ const headers = { "x-api-key": apiKey };
63
+ let bodyInit;
64
+ if (options.body !== undefined) {
65
+ headers["Content-Type"] = "application/json";
66
+ bodyInit = JSON.stringify(options.body);
67
+ }
68
+ // Reuse the registry error formatter by mapping path → a pseudo endpoint.
69
+ const errCtx = { platform: "monitors", resource: options.path };
70
+ try {
71
+ const response = await fetch(url, {
72
+ method: options.method,
73
+ headers,
74
+ body: bodyInit,
75
+ signal: controller.signal,
76
+ });
77
+ // 204 No Content (DELETE) has an empty body — report success explicitly.
78
+ if (response.status === 204) {
79
+ return JSON.stringify({ success: true, status: 204 });
80
+ }
81
+ const body = await response.text();
82
+ if (!response.ok) {
83
+ return formatHttpError(response.status, body, errCtx);
84
+ }
85
+ return truncateResponse(body);
86
+ }
87
+ catch (error) {
88
+ if (error instanceof DOMException && error.name === "AbortError") {
89
+ return `Error: Request timed out after ${TIMEOUT_MS / 1000} seconds.`;
90
+ }
91
+ if (error instanceof TypeError && (error.message.includes("fetch") || error.message.includes("network"))) {
92
+ return `Error: Could not reach SocialCrawl API at ${getBaseUrl()}. Check your network connection.`;
93
+ }
94
+ return `Error: Unexpected error — ${error instanceof Error ? error.message : String(error)}`;
95
+ }
96
+ finally {
97
+ clearTimeout(timeoutId);
98
+ }
99
+ }
45
100
  function buildUrl(options) {
46
101
  const path = options.platform === "meta"
47
102
  ? `/v1/${options.resource}`
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,4 @@ export declare const CHARACTER_LIMIT = 25000;
2
2
  export declare const TIMEOUT_MS = 30000;
3
3
  export declare const CREDIT_COSTS: Record<string, number>;
4
4
  export declare const SERVER_NAME = "socialcrawl-mcp";
5
- export declare const SERVER_VERSION = "1.4.0";
5
+ export declare const SERVER_VERSION = "1.5.0";
package/dist/constants.js CHANGED
@@ -6,5 +6,5 @@ export const CREDIT_COSTS = {
6
6
  premium: 10,
7
7
  };
8
8
  export const SERVER_NAME = "socialcrawl-mcp";
9
- export const SERVER_VERSION = "1.4.0";
9
+ export const SERVER_VERSION = "1.5.0";
10
10
  //# sourceMappingURL=constants.js.map
package/dist/data/docs.js CHANGED
@@ -27,9 +27,9 @@ ${PLATFORMS.map((p) => `- ${p.slug} (${p.endpointCount} endpoint${p.endpointCoun
27
27
  - Standard: 1 credit per request
28
28
  - Advanced: 5 credits per request
29
29
  - Premium: 10 credits per request
30
- - Flat overrides: \`GET /v1/search/everywhere\` costs a flat 20 credits
30
+ - Flat / metered overrides: \`GET /v1/search/everywhere\` is a flat 20 credits; the cross-platform Prism composites (\`/v1/prism/*\`) are priced flat or metered per recipe (0–50 credits)
31
31
 
32
- Most endpoints cost 1 credit (standard tier). Heavier endpoints (trending feeds, audience analytics, ad transparency, commerce/app-store data, content analysis, AI-powered utilities) cost 5 or 10. Use the \`pricing\` docs topic for the cost of every individual endpoint.
32
+ Most endpoints cost 1 credit (standard tier). Heavier endpoints (trending feeds, audience analytics, ad transparency, commerce/app-store data, content analysis, AI-powered utilities) cost 5 or 10, and the Prism composites cost more because they fan out across several endpoints. Use the \`pricing\` docs topic for the cost of every individual endpoint.
33
33
 
34
34
  ## Meta Endpoints
35
35
 
@@ -79,7 +79,7 @@ Every request costs credits. The MCP server pre-calculates cost from the endpoin
79
79
  | advanced | 5 credits | Trending feeds, audience analytics, ad transparency, GitHub composites, Polymarket research, Amazon/Google Shopping product detail, Trustpilot reviews, Google Business reviews/Q&A, hotel details, app-store search/info/reviews/charts, content-analysis aggregates |
80
80
  | premium | 10 credits | AI-powered utilities (transcript generation, age/gender detection, GitHub user/profile-velocity) and the app-store listings-search database (Google Play / App Store \`app-listings-search\`) |
81
81
 
82
- A single endpoint overrides this ladder: \`GET /v1/search/everywhere\` (universal meta-search) costs a flat **20 credits** because it fans out across 12+ platforms in parallel.
82
+ Some endpoints override this ladder with a flat or metered per-endpoint price. The universal meta-search \`GET /v1/search/everywhere\` is a flat **20 credits** (it fans out across 12+ platforms in parallel), and the cross-platform **Prism** composites (\`/v1/prism/*\`, plus per-platform composites like \`{platform}/profile/full\` and \`reddit/omni-search\`) are priced flat or metered per recipe — anywhere from 0 credits (\`prism/lookup\`) to 50 (\`prism/creator-vet\`) — because each one fans out across several detail endpoints. Metered composites deduct an upfront ceiling and auto-refund down to the actual work done; the response envelope's \`credits_used\` reports the real charge.
83
83
 
84
84
  For the exact cost of every endpoint, use the \`pricing\` docs topic — it lists all ${ENDPOINTS.length} endpoints with their per-request cost. \`socialcrawl_list_endpoints\` also shows the cost per endpoint for a single platform, and \`socialcrawl_request\` echoes the cost in its response header.
85
85
 
@@ -181,6 +181,37 @@ Idempotency rows live for **24h**. After that the key is reusable.
181
181
  ## Credits and cache
182
182
 
183
183
  Replays cost **0 credits** — same as cache hits.`,
184
+ monitors: `# SocialCrawl API — Monitors
185
+
186
+ Monitors are the **stateful, scheduled wrapper** around any SocialCrawl recipe. A monitor re-runs a registered endpoint or a Prism composite on a cadence, delivers each result to a signed webhook, evaluates alert rules, and accumulates a per-run time-series you can read back. *"Prism answers once; monitors watch it for you."*
187
+
188
+ Monitors are **not** registry endpoints — they live at \`/v1/monitors/*\` and are managed through the \`socialcrawl_monitors\` tool, not \`socialcrawl_request\`. Auth is the same \`x-api-key\`.
189
+
190
+ ## Operations (\`socialcrawl_monitors\` actions)
191
+
192
+ | Action | HTTP | What it does |
193
+ |--------|------|--------------|
194
+ | \`create\` | \`POST /v1/monitors\` | Create a monitor. Validates the recipe, enforces a plan slot cap, backfills one run, returns the monitor + \`estimated_cost_per_run\`/\`estimated_monthly_cost\` and (once) the webhook signing secret. |
195
+ | \`list\` | \`GET /v1/monitors\` | Owner-scoped, cursor-paginated list. Filter with \`status\` = active \| paused \| all. |
196
+ | \`get\` | \`GET /v1/monitors/:id\` | A single monitor (404 if not owned — never leaks existence or the secret). |
197
+ | \`runs\` | \`GET /v1/monitors/:id/runs\` | Reverse-chron run history, each with its \`legs[]\` envelope + \`alerts_fired\`. \`include=result\` adds the full stored result. |
198
+ | \`timeseries\` | \`GET /v1/monitors/:id/timeseries\` | The headline read — each stored run's stable computed keys projected into a \`{ t, metrics }\` series (reads snapshots, no live API calls). |
199
+ | \`pause\` / \`resume\` | \`PATCH /v1/monitors/:id\` | Pause or resume scheduling. |
200
+ | \`delete\` | \`DELETE /v1/monitors/:id\` | Unschedule + cascade-delete runs and the webhook. |
201
+
202
+ ## Create parameters
203
+
204
+ - \`recipe\` (required) — any registered endpoint or Prism composite as \`platform/resource\` (e.g. \`prism/brand-mentions\`, \`tiktok/profile\`).
205
+ - \`cadence\` (required) — \`hourly\` \| \`daily\` \| \`weekly\`, or a cron expression.
206
+ - \`webhook_url\` (required) — HTTPS endpoint that receives each run, signed with \`x-socialcrawl-signature\` (HMAC-SHA256, timestamped).
207
+ - \`params\` — parameters passed to the recipe every run.
208
+ - \`alert_rules\` — \`[{ metric, op, value, window? }]\`. Ops: \`gt\`, \`lt\`, \`gte\`, \`lte\`, \`abs_change_gt\`, \`pct_change_gt\`, \`pct_change_lt\` (the change ops compare a run to the previous comparable run; \`window\` is \`1d\` \| \`1w\`).
209
+ - \`suppress_webhook_unless_alert\` — only deliver the webhook when a rule trips.
210
+ - \`name\`, \`output_schema\`, \`webhook_secret\` — optional.
211
+
212
+ ## Billing
213
+
214
+ Managing monitors (create/list/get/runs/timeseries/pause/delete) costs **0 credits**. Each *scheduled run* bills the underlying recipe's normal cost **plus a 1-credit scheduling premium** — so a daily \`prism/reputation\` monitor costs 30 + 1 = 31 credits per run. Runs skipped for insufficient balance are never charged, and a run whose recipe fails is fully refunded. Use \`estimated_cost_per_run\` / \`estimated_monthly_cost\` (returned by \`create\`) to budget. The webhook auto-pauses after 10 consecutive delivery failures.`,
184
215
  };
185
216
  function buildCurl(e) {
186
217
  const parts = [];
@@ -363,6 +394,7 @@ export const DOCS = (() => {
363
394
  credits: HANDWRITTEN.credits,
364
395
  errors: HANDWRITTEN.errors,
365
396
  idempotency: HANDWRITTEN.idempotency,
397
+ monitors: HANDWRITTEN.monitors,
366
398
  pricing: buildPricingDoc(),
367
399
  full: buildFullDoc(),
368
400
  };
@@ -382,6 +414,7 @@ export function getAvailableTopics() {
382
414
  "credits",
383
415
  "errors",
384
416
  "idempotency",
417
+ "monitors",
385
418
  "pricing",
386
419
  ...PLATFORMS.map((p) => p.slug),
387
420
  ];