@nooticr/mcp 1.26.69 → 1.26.71
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 +1 -1
- package/dist/shared/brand-watch.js +1 -1
- package/dist/shared/replies.js +2 -0
- package/dist/shared/tools-def.js +3 -3
- package/dist/shared/tools.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -102,7 +102,7 @@ them caps that fan-out with an argument.
|
|
|
102
102
|
| `list_watchlist` | free | Who you are watching: handle, platform, note, and when you last caught up on each. |
|
|
103
103
|
| `catch_up_watchlist` | 2 per creator | What everyone you watch has posted since your last catch-up. Compares against the snapshot taken last time and moves it forward, so it answers "what is new" rather than "what exists". |
|
|
104
104
|
| `create_brand_watch` | free to call | Schedule a recurring sweep and get emailed only what is new. `kind: "mentions"` (default) is a recurring `search_mentions` sweep for `term`/`platforms`; `kind: "competitor"` is a recurring `get_user_posts` check on one creator (`handle`/`platform`), mailing only what beats their own recent median; `kind: "report"` runs `job: {tool, args}` — `niche_report` (mailed as written every run) or `discover_social_posts` (only unseen posts) — on the schedule; `kind: "portfolio"` sweeps up to 25 `terms` (your brand, products, competitors) across the same networks under one budget and mails one digest with each term's share of voice. Two calls by design: the first returns the quote (cost per run, cadence, cost per day) and a `confirmationToken`; nothing is created or charged until you call it again with `confirm: true` and that token. Each run then bills the same as calling the matching tool yourself — 2 credits per network (5 for Xiaohongshu) for mentions, a flat 2 credits for competitor, the job tool's own price for a report (3 for `niche_report`), and a mentions sweep per term for a portfolio — whose budget is split evenly and trims networks, never terms, and which refunds any term whose sweep fails. |
|
|
105
|
-
| `list_brand_watches` | free | Every watch
|
|
105
|
+
| `list_brand_watches` | free | Every brand-monitoring watch in your workspace (your teammates' included): term, networks, cadence, cost per run, credits spent so far, runs made, and when the next one is due. |
|
|
106
106
|
| `creative_assets_list` | free | The creative assets (voice-overs, sound effects, music, images, videos, composites) generated in your workspace, newest first, with url, kind, dimensions or duration, and provenance. Filter by `appId`, `kind`, `briefId` or `since`; page with `nextCursor`. |
|
|
107
107
|
| `creative_voices_search` | free | Search ElevenLabs' voice library by `query`, `language`, `accent`, `gender`, `age` or `useCase`. Returns a `voiceRef`, name, labels, language, accent and preview URL for each. Library voices only, never a cloned voice. |
|
|
108
108
|
| `creative_voiceover` | quoted first | A voice-over of up to 2500 characters with word timings for burned-in captions, in a voice from `creative_voices_search`. The first call returns a quote in credits and charges nothing; call again with `confirm: true` and the `confirmationToken` to generate. Settled to actual usage, never above the quote. |
|
|
@@ -537,7 +537,7 @@ export function registerBrandWatch(server, makeClient) {
|
|
|
537
537
|
});
|
|
538
538
|
server.registerTool("list_brand_watches", {
|
|
539
539
|
title: "List Brand Watches",
|
|
540
|
-
description: "Every scheduled brand-monitoring watch this
|
|
540
|
+
description: "Every scheduled brand-monitoring watch in this workspace (every member's watches, not only yours): term, networks, cadence, cost per " +
|
|
541
541
|
"run, credits spent so far, how many runs it has made, when the next one is due, and " +
|
|
542
542
|
"whether it is stopped and why. Read this before creating a watch — a second watch on the " +
|
|
543
543
|
"same term is a second recurring charge for the same answer. No cost to call.",
|
package/dist/shared/replies.js
CHANGED
|
@@ -42,6 +42,7 @@ export function registerReplyTools(server, makeClient) {
|
|
|
42
42
|
.object({
|
|
43
43
|
platform: platform.optional().describe("Only this network."),
|
|
44
44
|
influencerId: z.number().int().optional().describe("Creator profile id when more than one account is connected."),
|
|
45
|
+
account: z.union([z.number().int(), z.string()]).optional().describe("Connection id (`connectionId` from list_social_connections) when the profile has more than one account on the platform."),
|
|
45
46
|
postId: z.string().optional().describe("Only comments on this video/media id."),
|
|
46
47
|
sinceDays: z.number().int().min(1).max(30).optional().describe("How far back to look (default 7)."),
|
|
47
48
|
limit: z.number().int().min(1).max(100).optional().describe("Most comments to return (default 30)."),
|
|
@@ -73,6 +74,7 @@ export function registerReplyTools(server, makeClient) {
|
|
|
73
74
|
postId: z.string().describe("Post id the comment is on."),
|
|
74
75
|
text: z.string().optional().describe("The reply to store, in the user's words. Omit to have one written (1 credit)."),
|
|
75
76
|
influencerId: z.number().int().optional().describe("Creator profile id when more than one account is connected."),
|
|
77
|
+
account: z.union([z.number().int(), z.string()]).optional().describe("Connection id (`connectionId` from list_social_connections) when the profile has more than one account on the platform."),
|
|
76
78
|
guidance: z.string().optional().describe("What the reply should say or avoid; a URL here is the only URL the reply may contain."),
|
|
77
79
|
})
|
|
78
80
|
.strict(),
|
package/dist/shared/tools-def.js
CHANGED
|
@@ -351,7 +351,7 @@ export const TOOL_DEFINITIONS = [
|
|
|
351
351
|
{
|
|
352
352
|
name: "list_brand_watches",
|
|
353
353
|
title: "List Brand Watches",
|
|
354
|
-
description: "Every scheduled brand-monitoring watch this
|
|
354
|
+
description: "Every scheduled brand-monitoring watch in this workspace (every member's watches, not only yours): term, networks, cadence, cost per run, credits spent so far, runs made, next run due, and whether it is stopped and why. Read before creating a watch — a second watch on the same term is a second recurring charge for the same answer. No cost to call.",
|
|
355
355
|
inputSchema: z.object({}).strict(),
|
|
356
356
|
},
|
|
357
357
|
{
|
|
@@ -490,13 +490,13 @@ export const TOOL_DEFINITIONS = [
|
|
|
490
490
|
name: "list_comments_to_answer",
|
|
491
491
|
title: "List Comments To Answer",
|
|
492
492
|
description: "List recent comments on the user's own connected account that nobody has answered yet, newest first. Only the user's own posts, through their own connection: YouTube works once connected with capabilities: [\"manage_comments\"] (see connect_social_account); networks that cannot be answered come back under `unsupported` with the reason. Optional platform, influencerId, postId, sinceDays (1-30, default 7), limit (1-100, default 30), includeAnswered. Read-only: it sends nothing. No cost to call.",
|
|
493
|
-
inputSchema: z.object({ platform: z.enum(["youtube", "instagram"]).optional().describe("Only this network."), influencerId: z.number().int().optional().describe("Creator profile id when more than one account is connected."), postId: z.string().optional().describe("Only comments on this video/media id."), sinceDays: z.number().int().min(1).max(30).optional().describe("How far back to look (default 7)."), limit: z.number().int().min(1).max(100).optional().describe("Most comments to return (default 30)."), includeAnswered: z.boolean().optional().describe("Also list comments that already have a reply.") }).strict(),
|
|
493
|
+
inputSchema: z.object({ platform: z.enum(["youtube", "instagram"]).optional().describe("Only this network."), influencerId: z.number().int().optional().describe("Creator profile id when more than one account is connected."), account: z.union([z.number().int(), z.string()]).optional().describe("Connection id (`connectionId` from list_social_connections) when the profile has more than one account on the platform."), postId: z.string().optional().describe("Only comments on this video/media id."), sinceDays: z.number().int().min(1).max(30).optional().describe("How far back to look (default 7)."), limit: z.number().int().min(1).max(100).optional().describe("Most comments to return (default 30)."), includeAnswered: z.boolean().optional().describe("Also list comments that already have a reply.") }).strict(),
|
|
494
494
|
},
|
|
495
495
|
{
|
|
496
496
|
name: "draft_comment_reply",
|
|
497
497
|
title: "Draft Comment Reply",
|
|
498
498
|
description: "Draft a reply to one comment from list_comments_to_answer and store it; nothing is posted. Pass `text` to use the user's own wording (no cost), or omit it and nooticr writes one (costs 1 nooticr credit); `guidance` steers the writing. Replies may not contain links, emails, phone numbers or @-mentions of anyone but the commenter. Returns a draftId and a confirmationToken: show the reply to the user first, then post it with post_comment_reply.",
|
|
499
|
-
inputSchema: z.object({ platform: z.enum(["youtube", "instagram"]).describe("The network the comment is on."), commentId: z.string().describe("Comment id from list_comments_to_answer."), postId: z.string().describe("Post id the comment is on."), text: z.string().optional().describe("The reply to store, in the user's words. Omit to have one written (1 credit)."), influencerId: z.number().int().optional().describe("Creator profile id when more than one account is connected."), guidance: z.string().optional().describe("What the reply should say or avoid; a URL here is the only URL the reply may contain.") }).strict(),
|
|
499
|
+
inputSchema: z.object({ platform: z.enum(["youtube", "instagram"]).describe("The network the comment is on."), commentId: z.string().describe("Comment id from list_comments_to_answer."), postId: z.string().describe("Post id the comment is on."), text: z.string().optional().describe("The reply to store, in the user's words. Omit to have one written (1 credit)."), influencerId: z.number().int().optional().describe("Creator profile id when more than one account is connected."), account: z.union([z.number().int(), z.string()]).optional().describe("Connection id (`connectionId` from list_social_connections) when the profile has more than one account on the platform."), guidance: z.string().optional().describe("What the reply should say or avoid; a URL here is the only URL the reply may contain.") }).strict(),
|
|
500
500
|
},
|
|
501
501
|
{
|
|
502
502
|
name: "post_comment_reply",
|
package/dist/shared/tools.js
CHANGED
|
@@ -36,7 +36,7 @@ import { registerAmazonTools } from "./amazon.js";
|
|
|
36
36
|
import { registerMarketplaceTools } from "./marketplace.js";
|
|
37
37
|
import { DEFAULT_NOOTICR_SETTINGS, DEFAULT_SOCIAL_PLATFORMS, MemorySettingsStore, SETTINGS_READ_TOOL, SETTINGS_UPDATE_TOOL, settingsOwnerFromAuth, } from "./settings.js";
|
|
38
38
|
/** Current MCP server version — bumped on every deploy for traceability. */
|
|
39
|
-
export const MCP_SERVER_VERSION = "1.26.
|
|
39
|
+
export const MCP_SERVER_VERSION = "1.26.71";
|
|
40
40
|
/** MCP Apps extension identifier */
|
|
41
41
|
const UI_EXTENSION = "io.modelcontextprotocol/ui";
|
|
42
42
|
/** MIME type for MCP Apps HTML resources */
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nooticr/mcp",
|
|
3
3
|
"mcpName": "com.nooticr/mcp",
|
|
4
|
-
"version": "1.26.
|
|
4
|
+
"version": "1.26.71",
|
|
5
5
|
"description": "MCP server for nooticr - fetch, discover and understand TikTok/Instagram/YouTube/X/Reddit/LinkedIn/Weibo posts with AI (media metadata, niche discovery, brand monitoring, hook & viral analysis)",
|
|
6
6
|
"homepage": "https://mcp.nooticr.com",
|
|
7
7
|
"repository": {
|