mcp-scraper 0.24.0 → 0.26.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.
Files changed (39) hide show
  1. package/README.md +3 -3
  2. package/dist/bin/api-server.cjs +5044 -2895
  3. package/dist/bin/api-server.cjs.map +1 -1
  4. package/dist/bin/api-server.js +2 -2
  5. package/dist/bin/mcp-scraper-cli.cjs +1 -1
  6. package/dist/bin/mcp-scraper-cli.cjs.map +1 -1
  7. package/dist/bin/mcp-scraper-cli.js +1 -1
  8. package/dist/bin/mcp-scraper-install.cjs +2 -2
  9. package/dist/bin/mcp-scraper-install.cjs.map +1 -1
  10. package/dist/bin/mcp-scraper-install.js +2 -2
  11. package/dist/bin/mcp-stdio-server.cjs +205 -61
  12. package/dist/bin/mcp-stdio-server.cjs.map +1 -1
  13. package/dist/bin/mcp-stdio-server.js +4 -4
  14. package/dist/{chunk-PNBYYAEK.js → chunk-3ZZOLQ6A.js} +2 -2
  15. package/dist/{chunk-JHI373VB.js → chunk-4767BA2O.js} +85 -3
  16. package/dist/chunk-4767BA2O.js.map +1 -0
  17. package/dist/chunk-7PYRJ7CB.js +7 -0
  18. package/dist/chunk-7PYRJ7CB.js.map +1 -0
  19. package/dist/{chunk-YNHPZU6B.js → chunk-TBRX7VOP.js} +2 -2
  20. package/dist/{chunk-YNHPZU6B.js.map → chunk-TBRX7VOP.js.map} +1 -1
  21. package/dist/{chunk-SUPUHPJS.js → chunk-UMTBCKHH.js} +200 -62
  22. package/dist/chunk-UMTBCKHH.js.map +1 -0
  23. package/dist/{server-I5U3OUZZ.js → server-H4PPYTOM.js} +2484 -580
  24. package/dist/server-H4PPYTOM.js.map +1 -0
  25. package/dist/{site-extract-repository-2QQSL2QC.js → site-extract-repository-O36SIFI2.js} +3 -3
  26. package/dist/{worker-RV2TYXE3.js → worker-E3KHQH2F.js} +2 -2
  27. package/docs/adr/0002-hybrid-smart-rag-vault-retrieval.md +62 -0
  28. package/docs/adr/README.md +1 -0
  29. package/docs/mcp-tool-manifest.generated.json +710 -55
  30. package/docs/specs/main-mcp-integration-ownership-spec.md +1164 -0
  31. package/package.json +6 -2
  32. package/dist/chunk-CDLHUCMT.js +0 -7
  33. package/dist/chunk-CDLHUCMT.js.map +0 -1
  34. package/dist/chunk-JHI373VB.js.map +0 -1
  35. package/dist/chunk-SUPUHPJS.js.map +0 -1
  36. package/dist/server-I5U3OUZZ.js.map +0 -1
  37. /package/dist/{chunk-PNBYYAEK.js.map → chunk-3ZZOLQ6A.js.map} +0 -0
  38. /package/dist/{site-extract-repository-2QQSL2QC.js.map → site-extract-repository-O36SIFI2.js.map} +0 -0
  39. /package/dist/{worker-RV2TYXE3.js.map → worker-E3KHQH2F.js.map} +0 -0
@@ -1,12 +1,12 @@
1
1
  {
2
- "generatedAt": "2026-07-16T22:14:32.367Z",
2
+ "generatedAt": "2026-07-17T00:37:02.566Z",
3
3
  "generatedFrom": "dist/bin/mcp-stdio-server.js",
4
4
  "serverInfo": {
5
5
  "name": "mcp-scraper",
6
- "version": "0.24.0"
6
+ "version": "0.26.0"
7
7
  },
8
8
  "counts": {
9
- "unified_stdio": 160
9
+ "unified_stdio": 163
10
10
  },
11
11
  "surfaces": {
12
12
  "unified_stdio": [
@@ -52,6 +52,7 @@
52
52
  "browser_screenshot",
53
53
  "browser_scroll",
54
54
  "browser_type",
55
+ "bulk-delete-notes",
55
56
  "call_service_connection_action",
56
57
  "capture_serp_page_snapshots",
57
58
  "capture_serp_snapshot",
@@ -143,6 +144,7 @@
143
144
  "search_serp",
144
145
  "set_scheduled_action_connections",
145
146
  "set-agent-identity",
147
+ "set-schedule-defaults",
146
148
  "set-schedule-entitlement",
147
149
  "slack_send_message",
148
150
  "storage-usage",
@@ -154,6 +156,7 @@
154
156
  "table-list",
155
157
  "table-query",
156
158
  "temporal-recall",
159
+ "test_service_connection",
157
160
  "trustpilot_reviews",
158
161
  "upsert-memory-tag",
159
162
  "validate-memory-write",
@@ -4199,6 +4202,156 @@
4199
4202
  "taskSupport": "forbidden"
4200
4203
  }
4201
4204
  },
4205
+ {
4206
+ "name": "bulk-delete-notes",
4207
+ "title": "Bulk Delete Notes",
4208
+ "description": "Delete every note in one vault matching all given filters (ANDed) plus an optional tag match (ANY of the given tags) — at least one filter or tag is required; there is no unfiltered delete-all here (use delete-vault for that). Defaults to dryRun: true, previewing the match count and a sample of up to 20 matching notes without deleting anything. Pass dryRun: false to actually delete. DESTRUCTIVE and not recoverable when dryRun is false. Requires write scope. Refuses secure vaults (not indexed, filtering is meaningless there).",
4209
+ "inputSchema": {
4210
+ "type": "object",
4211
+ "properties": {
4212
+ "vault": {
4213
+ "type": "string",
4214
+ "description": "Vault to delete from. Optional; defaults to the session active vault, then the first vault the caller is entitled to."
4215
+ },
4216
+ "filters": {
4217
+ "type": "array",
4218
+ "items": {
4219
+ "type": "object",
4220
+ "properties": {
4221
+ "column": {
4222
+ "type": "string",
4223
+ "enum": [
4224
+ "path",
4225
+ "title",
4226
+ "kind",
4227
+ "source",
4228
+ "captured_at",
4229
+ "created_at",
4230
+ "updated_at",
4231
+ "revision"
4232
+ ],
4233
+ "description": "Note column to filter on."
4234
+ },
4235
+ "op": {
4236
+ "type": "string",
4237
+ "enum": [
4238
+ "eq",
4239
+ "neq",
4240
+ "gt",
4241
+ "gte",
4242
+ "lt",
4243
+ "lte",
4244
+ "like",
4245
+ "prefix",
4246
+ "in"
4247
+ ],
4248
+ "description": "\"prefix\" anchors to the start of the value only (e.g. path prefix \"Mastra/opt-\"); \"like\" matches anywhere in the value; \"in\" requires an array value."
4249
+ },
4250
+ "value": {
4251
+ "description": "Value to compare against. For \"in\", pass an array."
4252
+ }
4253
+ },
4254
+ "required": [
4255
+ "column",
4256
+ "op"
4257
+ ],
4258
+ "additionalProperties": false
4259
+ },
4260
+ "default": [],
4261
+ "description": "Filters to AND together. At least one of filters/tags is required."
4262
+ },
4263
+ "tags": {
4264
+ "type": "array",
4265
+ "items": {
4266
+ "type": "string"
4267
+ },
4268
+ "description": "Match notes carrying ANY of these tags (ORed among themselves, ANDed with filters). At least one of filters/tags is required."
4269
+ },
4270
+ "dryRun": {
4271
+ "type": "boolean",
4272
+ "default": true,
4273
+ "description": "When true (default), previews matches without deleting anything. Pass false to actually delete."
4274
+ }
4275
+ },
4276
+ "additionalProperties": false,
4277
+ "$schema": "http://json-schema.org/draft-07/schema#"
4278
+ },
4279
+ "outputSchema": {
4280
+ "type": "object",
4281
+ "properties": {
4282
+ "ok": {
4283
+ "type": "boolean",
4284
+ "description": "True on success; false on auth/scope/validation error."
4285
+ },
4286
+ "vault": {
4287
+ "type": "string",
4288
+ "description": "The vault operated on (after defaulting). Present when ok is true."
4289
+ },
4290
+ "dryRun": {
4291
+ "type": "boolean",
4292
+ "description": "Echoes whether this call was a preview or a real delete."
4293
+ },
4294
+ "matchCount": {
4295
+ "type": "number",
4296
+ "description": "Number of notes matching the filters. Present on a dry run."
4297
+ },
4298
+ "sample": {
4299
+ "type": "array",
4300
+ "items": {
4301
+ "type": "object",
4302
+ "properties": {
4303
+ "path": {
4304
+ "type": "string"
4305
+ },
4306
+ "title": {
4307
+ "type": "string"
4308
+ },
4309
+ "updatedAt": {
4310
+ "type": "string"
4311
+ }
4312
+ },
4313
+ "required": [
4314
+ "path",
4315
+ "title",
4316
+ "updatedAt"
4317
+ ],
4318
+ "additionalProperties": false
4319
+ },
4320
+ "description": "Up to 20 matching notes, most-recently-updated first. Present on a dry run."
4321
+ },
4322
+ "deleted": {
4323
+ "type": "number",
4324
+ "description": "Number of notes actually deleted. Present when dryRun is false."
4325
+ },
4326
+ "deletedPaths": {
4327
+ "type": "array",
4328
+ "items": {
4329
+ "type": "string"
4330
+ },
4331
+ "description": "Paths of the deleted notes. Present when dryRun is false."
4332
+ },
4333
+ "error": {
4334
+ "type": "string",
4335
+ "description": "Human-readable failure reason when ok is false."
4336
+ }
4337
+ },
4338
+ "required": [
4339
+ "ok"
4340
+ ],
4341
+ "additionalProperties": false,
4342
+ "$schema": "http://json-schema.org/draft-07/schema#"
4343
+ },
4344
+ "annotations": {
4345
+ "title": "Bulk Delete Notes",
4346
+ "readOnlyHint": false,
4347
+ "destructiveHint": true,
4348
+ "idempotentHint": false,
4349
+ "openWorldHint": false
4350
+ },
4351
+ "execution": {
4352
+ "taskSupport": "forbidden"
4353
+ }
4354
+ },
4202
4355
  {
4203
4356
  "name": "call_service_connection_action",
4204
4357
  "title": "Run Connected Service Action",
@@ -4997,7 +5150,7 @@
4997
5150
  {
4998
5151
  "name": "create-scheduled-action",
4999
5152
  "title": "Create Scheduled Action",
5000
- "description": "Create a Credit-metered scheduled action for an active MCP Scraper Starter plan or higher, in agent mode (default) or connection_sync mode. Each execution has a 75-Credit base charge; agent model usage is added at 1.5 times OpenRouter's actual reported cost. Agent mode follows the description and writes a result into the target vault. connection_sync deterministically runs approved read-only tools on bound service connections and ingests their data. Google Search Console syncs also upsert a typed tenant-owned performance table for exact filtering with table-query; discover its tableName by calling list_service_connections after the first successful run. Cadence 'once' runs a single time then completes permanently. Requires write access to the target vault.",
5153
+ "description": "Create a Credit-metered scheduled action for an active MCP Scraper Starter plan or higher, in agent mode (default) or connection_sync mode. Each execution has a 75-Credit base charge; agent model usage is added at 1.5 times OpenRouter's actual reported cost. Agent mode follows the description and writes a result into the target vault. connection_sync deterministically runs the approved read-only tools on bound service connections and ingests their data; it requires at least one connection to be bound before execution. Google Search Console syncs also upsert a typed tenant-owned performance table for exact filtering with table-query; discover its tableName by calling list_service_connections after the first successful run. Cadence 'once' runs a single time then completes permanently. Requires write access to the target vault.",
5001
5154
  "inputSchema": {
5002
5155
  "type": "object",
5003
5156
  "properties": {
@@ -5037,7 +5190,7 @@
5037
5190
  },
5038
5191
  "timezone": {
5039
5192
  "type": "string",
5040
- "description": "IANA timezone name, e.g. \"America/Denver\". Only meaningful together with timeOfDay. Defaults to UTC."
5193
+ "description": "IANA timezone name, e.g. \"America/Denver\". Only meaningful together with timeOfDay or deployDate. Omit to use the account's default timezone (set via set-schedule-defaults), falling back to UTC."
5041
5194
  },
5042
5195
  "deployDate": {
5043
5196
  "type": "string",
@@ -8708,7 +8861,7 @@
8708
8861
  {
8709
8862
  "name": "get-schedule-status",
8710
8863
  "title": "Get Schedule Status",
8711
- "description": "Get the Credit-metered Scheduled Actions access and billing policy. Scheduling requires an active MCP Scraper Starter plan or higher but has no separate subscription: each execution has a 75-Credit base charge, and agent model usage is billed at 1.5 times OpenRouter's actual reported cost.",
8864
+ "description": "Get the Credit-metered Scheduled Actions access, billing policy, and default timezone. Scheduling requires an active MCP Scraper Starter plan or higher but has no separate subscription: each execution has a 75-Credit base charge, and agent model usage is billed at 1.5 times OpenRouter's actual reported cost.",
8712
8865
  "inputSchema": {
8713
8866
  "type": "object",
8714
8867
  "properties": {},
@@ -10683,7 +10836,7 @@
10683
10836
  {
10684
10837
  "name": "list_service_connections",
10685
10838
  "title": "List Connected Services",
10686
- "description": "List every third-party service connection this MCP Scraper account has authorized, including Resend, GitHub, Google Analytics, Google Search Console, YouTube, Facebook Pages, LinkedIn, X, Meta Marketing, Slack, Gmail, Calendar, Google Drive, Zoom, Xero, and others. Returns the tenant-scoped connectionId, credential transport, exact live readTools and gated actionTools, permission-aware toolCapabilities with missing OAuth-grant or provider-app-feature blockers, permanently blocked administrative tools, and schema-discovery metadata. Get a connectionId and exact tool name here before calling describe_service_connection_tool, read_service_connection, or call_service_connection_action. Nango OAuth and official remote MCP connections use the same provider-neutral bridges; mutations still require the account action switch and an exact allowed action. A scheduled Search Console connection_sync creates a typed tenant-owned performance table; after it runs, use the returned tableName with table-describe and table-query instead of repeatedly calling Google for historical filtering.",
10839
+ "description": "List every third-party service connection this MCP Scraper account has authorized, including Resend, GitHub, Google Analytics, Google Search Console, YouTube, Facebook Pages, LinkedIn, X, Meta Marketing, Slack, Gmail, Calendar, Google Drive, Zoom, Xero, and others. Returns the tenant-scoped connectionId; verified providerAccountEmail/providerAccountName identity when the provider exposes it; credential transport; exact live readTools and gated actionTools; permission-aware toolCapabilities with missing OAuth-grant or provider-app-feature blockers; permanently blocked administrative tools; and schema-discovery metadata. The provider identity is distinct from the MCP Scraper login: use it to choose the intended account before any read, export, schedule binding, or gated action. Get a connectionId and exact tool name here before calling describe_service_connection_tool, read_service_connection, or call_service_connection_action. Nango OAuth and official remote MCP connections use the same provider-neutral bridges; mutations still require the account action switch and an exact allowed action. A scheduled Search Console connection_sync creates a typed tenant-owned performance table; after it runs, use the returned tableName with table-describe and table-query instead of repeatedly calling Google for historical filtering.",
10687
10840
  "inputSchema": {
10688
10841
  "type": "object",
10689
10842
  "properties": {},
@@ -10710,11 +10863,63 @@
10710
10863
  ]
10711
10864
  },
10712
10865
  "label": {
10713
- "type": "string"
10866
+ "type": "string",
10867
+ "description": "Best verified provider-side account label. This is never derived from the MCP Scraper login email."
10868
+ },
10869
+ "providerAccountId": {
10870
+ "type": [
10871
+ "string",
10872
+ "null"
10873
+ ],
10874
+ "description": "Provider-side account or principal identifier when safely discoverable. This is not the MCP Scraper user id."
10875
+ },
10876
+ "providerAccountEmail": {
10877
+ "type": [
10878
+ "string",
10879
+ "null"
10880
+ ],
10881
+ "description": "Actual provider-side email for the authorized account when the provider exposes and verifies it. Null for organization-only accounts or unavailable identity scopes."
10882
+ },
10883
+ "providerAccountName": {
10884
+ "type": [
10885
+ "string",
10886
+ "null"
10887
+ ],
10888
+ "description": "Actual provider-side person, workspace, channel, or organization name when available."
10889
+ },
10890
+ "providerIdentityStatus": {
10891
+ "type": "string",
10892
+ "enum": [
10893
+ "pending",
10894
+ "verified",
10895
+ "unavailable"
10896
+ ],
10897
+ "description": "Whether provider-side account identity discovery is pending, verified, or unavailable under the current OAuth grant. Reconnect when unavailable after identity scopes were added."
10714
10898
  },
10715
10899
  "status": {
10716
10900
  "type": "string"
10717
10901
  },
10902
+ "lifecycleStatus": {
10903
+ "type": "string",
10904
+ "enum": [
10905
+ "pending",
10906
+ "connected",
10907
+ "needs_reauth",
10908
+ "disconnecting",
10909
+ "disconnected"
10910
+ ],
10911
+ "description": "Credential lifecycle. This is separate from current provider availability."
10912
+ },
10913
+ "operationalStatus": {
10914
+ "type": "string",
10915
+ "enum": [
10916
+ "unknown",
10917
+ "available",
10918
+ "degraded",
10919
+ "unavailable"
10920
+ ],
10921
+ "description": "Last observed provider transport availability. Unavailable does not imply reconnect is required."
10922
+ },
10718
10923
  "reconnectRequired": {
10719
10924
  "type": "boolean"
10720
10925
  },
@@ -10879,6 +11084,36 @@
10879
11084
  ],
10880
11085
  "description": "Opaque revision of the resolved live tool catalog, when available. It changes when provider tools or policy change."
10881
11086
  },
11087
+ "lastCheckedAt": {
11088
+ "type": [
11089
+ "string",
11090
+ "null"
11091
+ ]
11092
+ },
11093
+ "lastSuccessfulCallAt": {
11094
+ "type": [
11095
+ "string",
11096
+ "null"
11097
+ ]
11098
+ },
11099
+ "lastFailureAt": {
11100
+ "type": [
11101
+ "string",
11102
+ "null"
11103
+ ]
11104
+ },
11105
+ "lastFailureCode": {
11106
+ "type": [
11107
+ "string",
11108
+ "null"
11109
+ ]
11110
+ },
11111
+ "lastFailureRetryable": {
11112
+ "type": [
11113
+ "boolean",
11114
+ "null"
11115
+ ]
11116
+ },
10882
11117
  "vaultName": {
10883
11118
  "type": [
10884
11119
  "string",
@@ -10898,6 +11133,10 @@
10898
11133
  "connectionId",
10899
11134
  "providerConfigKey",
10900
11135
  "label",
11136
+ "providerAccountId",
11137
+ "providerAccountEmail",
11138
+ "providerAccountName",
11139
+ "providerIdentityStatus",
10901
11140
  "status",
10902
11141
  "transport",
10903
11142
  "actionsEnabled",
@@ -11222,12 +11461,13 @@
11222
11461
  {
11223
11462
  "name": "list-memory-tags",
11224
11463
  "title": "List Memory Tags",
11225
- "description": "List the live canonical tag vocabulary, aliases, usage counts, and per-vault distribution. Use this before choosing tags so existing concepts are reused instead of fragmented.",
11464
+ "description": "List the complete live canonical tag vocabulary, aliases, usage counts, and per-vault distribution. Always call this before proposing, resolving, or writing tags so the AI can reuse existing concepts and add only central, reusable concepts that are genuinely missing.",
11226
11465
  "inputSchema": {
11227
11466
  "type": "object",
11228
11467
  "properties": {
11229
11468
  "includeDeprecated": {
11230
- "type": "boolean"
11469
+ "type": "boolean",
11470
+ "description": "Include deprecated tags as well as active tags. Defaults true so the AI sees the complete vocabulary; pass false only for an active-only display."
11231
11471
  }
11232
11472
  },
11233
11473
  "additionalProperties": false,
@@ -12458,7 +12698,7 @@
12458
12698
  {
12459
12699
  "name": "memory-capture",
12460
12700
  "title": "Capture Governed Memory",
12461
- "description": "Strict normal-create path for durable memory. Refuses incomplete notes, writes through memory-put, registers canonical tags, and reads the note back to verify persisted content and props. Call prepare-memory-write first. Reserve memory-put for low-level migrations or deliberate edits.",
12701
+ "description": "Strict normal-create path for durable memory. Before capture, list the complete tag vocabulary, call prepare-memory-write, run hybrid memory-search for related notes, and read the strongest link candidates. This tool refuses incomplete notes, writes through memory-put, registers canonical tags, and verifies persisted content and props. Reserve memory-put for low-level migrations or deliberate edits.",
12462
12702
  "inputSchema": {
12463
12703
  "type": "object",
12464
12704
  "properties": {
@@ -12553,6 +12793,27 @@
12553
12793
  "type": "string",
12554
12794
  "description": "Explicit sub-folder within the vault; overrides routing-derived folder."
12555
12795
  },
12796
+ "script_links": {
12797
+ "type": "array",
12798
+ "items": {
12799
+ "type": "string"
12800
+ },
12801
+ "description": "Skills only: one or more Obsidian/internal paths under scripts/."
12802
+ },
12803
+ "reference_links": {
12804
+ "type": "array",
12805
+ "items": {
12806
+ "type": "string"
12807
+ },
12808
+ "description": "Skills only: optional Obsidian/internal paths under references/."
12809
+ },
12810
+ "template_links": {
12811
+ "type": "array",
12812
+ "items": {
12813
+ "type": "string"
12814
+ },
12815
+ "description": "Skills only: optional Obsidian/internal paths under templates/."
12816
+ },
12556
12817
  "parentMessageId": {
12557
12818
  "type": "string",
12558
12819
  "description": "Channel messages only: the path of the top-level message this is a reply to. Absent on top-level messages."
@@ -12963,6 +13224,27 @@
12963
13224
  "type": "string",
12964
13225
  "description": "Explicit sub-folder within the vault; overrides routing-derived folder."
12965
13226
  },
13227
+ "script_links": {
13228
+ "type": "array",
13229
+ "items": {
13230
+ "type": "string"
13231
+ },
13232
+ "description": "Skills only: one or more Obsidian/internal paths under scripts/."
13233
+ },
13234
+ "reference_links": {
13235
+ "type": "array",
13236
+ "items": {
13237
+ "type": "string"
13238
+ },
13239
+ "description": "Skills only: optional Obsidian/internal paths under references/."
13240
+ },
13241
+ "template_links": {
13242
+ "type": "array",
13243
+ "items": {
13244
+ "type": "string"
13245
+ },
13246
+ "description": "Skills only: optional Obsidian/internal paths under templates/."
13247
+ },
12966
13248
  "parentMessageId": {
12967
13249
  "type": "string",
12968
13250
  "description": "Channel messages only: the path of the top-level message this is a reply to. Absent on top-level messages."
@@ -13492,6 +13774,27 @@
13492
13774
  "type": "string",
13493
13775
  "description": "Explicit sub-folder within the vault; overrides routing-derived folder."
13494
13776
  },
13777
+ "script_links": {
13778
+ "type": "array",
13779
+ "items": {
13780
+ "type": "string"
13781
+ },
13782
+ "description": "Skills only: one or more Obsidian/internal paths under scripts/."
13783
+ },
13784
+ "reference_links": {
13785
+ "type": "array",
13786
+ "items": {
13787
+ "type": "string"
13788
+ },
13789
+ "description": "Skills only: optional Obsidian/internal paths under references/."
13790
+ },
13791
+ "template_links": {
13792
+ "type": "array",
13793
+ "items": {
13794
+ "type": "string"
13795
+ },
13796
+ "description": "Skills only: optional Obsidian/internal paths under templates/."
13797
+ },
13495
13798
  "parentMessageId": {
13496
13799
  "type": "string",
13497
13800
  "description": "Channel messages only: the path of the top-level message this is a reply to. Absent on top-level messages."
@@ -13696,33 +13999,141 @@
13696
13999
  },
13697
14000
  {
13698
14001
  "name": "memory-search",
13699
- "title": "Semantic Memory Search",
13700
- "description": "Semantic search across every vault the caller can reach (own, shared, channels) in one call reach for this first when searching by meaning. For a fast title-only 'does this exist' check, use memory-suggest instead. Form query as a well-phrased semantic reformulation (expand abbreviations, add synonyms/entities) rather than the user's raw message; pass their original wording separately in userMessage for retrieval-quality logging. Each result is tagged with its source vault. Embeds the query (network call).",
14002
+ "title": "Hybrid Smart RAG Memory Search",
14003
+ "description": "Default Smart RAG search across accessible memory. Form 2-4 focused query variants, combine semantic matches with exact vault/tag/date/kind/type/metadata filters, expand one bounded hop of outgoing links and backlinks around strong seeds, then rerank. Defaults: retrieve/fuse 50 candidates, 8 graph seeds, 5 neighbors per seed, rerank to 30. Graph neighbors are candidates, never automatic winners or links. Before tagging or writing, also call list-memory-tags to inspect the complete vocabulary and reuse existing tags; read strong related notes before selecting links.",
13701
14004
  "inputSchema": {
13702
14005
  "type": "object",
13703
14006
  "properties": {
13704
14007
  "vault": {
13705
14008
  "type": "string",
13706
- "description": "Narrow the search to exactly this vault. Optional; when omitted (the default and recommended usage) every vault the caller is entitled to is searched in one call."
14009
+ "description": "Exact logical vault handle to search. Omit to search every entitled vault."
13707
14010
  },
13708
14011
  "query": {
13709
14012
  "type": "string",
13710
14013
  "minLength": 1,
13711
- "description": "The semantic search query — YOUR reformulation of what the human wants, not their raw message verbatim. Expand ambiguous references, add relevant synonyms/entities. Must be non-empty."
14014
+ "description": "A focused semantic reformulation of the request."
13712
14015
  },
13713
14016
  "userMessage": {
13714
14017
  "type": "string",
13715
- "description": "The human's original, unmodified message that prompted this search. Optional but recommended recorded for retrieval-quality review, does not affect the search."
14018
+ "description": "Original human wording. Used as a distinct query variant when useful and logged for quality review."
14019
+ },
14020
+ "queries": {
14021
+ "type": "array",
14022
+ "items": {
14023
+ "type": "string",
14024
+ "minLength": 1
14025
+ },
14026
+ "minItems": 2,
14027
+ "maxItems": 4,
14028
+ "description": "Caller-provided focused query variants. The planner deduplicates these with query, original wording, and tag/entity terms."
14029
+ },
14030
+ "entities": {
14031
+ "type": "array",
14032
+ "items": {
14033
+ "type": "string",
14034
+ "minLength": 1
14035
+ },
14036
+ "maxItems": 20,
14037
+ "description": "Named entities or exact terms used to form a focused query variant."
14038
+ },
14039
+ "tags": {
14040
+ "type": "array",
14041
+ "items": {
14042
+ "type": "string",
14043
+ "minLength": 1
14044
+ },
14045
+ "maxItems": 20,
14046
+ "description": "Exact canonical tags used for tag-channel retrieval and filtering."
14047
+ },
14048
+ "tagMode": {
14049
+ "type": "string",
14050
+ "enum": [
14051
+ "any",
14052
+ "all"
14053
+ ],
14054
+ "description": "Whether a note must match any or all supplied tags. Default any."
14055
+ },
14056
+ "kind": {
14057
+ "type": "string",
14058
+ "enum": [
14059
+ "note",
14060
+ "library",
14061
+ "capture",
14062
+ "decision",
14063
+ "message"
14064
+ ],
14065
+ "description": "Exact persisted note-kind filter."
14066
+ },
14067
+ "type": {
14068
+ "type": "string",
14069
+ "minLength": 1,
14070
+ "description": "Exact props.type filter."
14071
+ },
14072
+ "dateFrom": {
14073
+ "type": "string",
14074
+ "format": "date-time",
14075
+ "description": "Inclusive lower bound for note updatedAt."
14076
+ },
14077
+ "dateTo": {
14078
+ "type": "string",
14079
+ "format": "date-time",
14080
+ "description": "Inclusive upper bound for note updatedAt."
14081
+ },
14082
+ "metadata": {
14083
+ "type": "object",
14084
+ "additionalProperties": {
14085
+ "type": [
14086
+ "string",
14087
+ "number",
14088
+ "boolean"
14089
+ ]
14090
+ },
14091
+ "description": "Exact equality filters for primitive note props."
14092
+ },
14093
+ "queryVariantCount": {
14094
+ "type": "integer",
14095
+ "minimum": 2,
14096
+ "maximum": 4,
14097
+ "description": "Number of variants. Default 3."
14098
+ },
14099
+ "candidatePool": {
14100
+ "type": "integer",
14101
+ "minimum": 10,
14102
+ "maximum": 100,
14103
+ "description": "Total fused candidates before final reranking. Default 50."
14104
+ },
14105
+ "graphSeedCount": {
14106
+ "type": "integer",
14107
+ "minimum": 0,
14108
+ "maximum": 20,
14109
+ "description": "Strong preliminary notes whose graph neighborhoods are considered. Default 8."
14110
+ },
14111
+ "graphDepth": {
14112
+ "type": "number",
14113
+ "const": 1,
14114
+ "description": "Graph expansion depth. Bounded to exactly one hop."
14115
+ },
14116
+ "graphNeighborsPerSeed": {
14117
+ "type": "integer",
14118
+ "minimum": 1,
14119
+ "maximum": 10,
14120
+ "description": "Maximum outgoing-link plus backlink neighbors per seed. Default 5."
14121
+ },
14122
+ "rerankTopN": {
14123
+ "type": "integer",
14124
+ "minimum": 1,
14125
+ "maximum": 50,
14126
+ "description": "Final results retained after Jina reranking. Default 30."
13716
14127
  },
13717
14128
  "topK": {
13718
14129
  "type": "integer",
13719
14130
  "minimum": 1,
13720
14131
  "maximum": 50,
13721
- "description": "Maximum number of chunks to return. Optional; default 8, range 1-50."
14132
+ "description": "Deprecated compatibility alias for rerankTopN. Prefer rerankTopN; default remains 30."
13722
14133
  },
13723
14134
  "includeShared": {
13724
14135
  "type": "boolean",
13725
- "description": "Whether to also search notes individually shared with you and accepted. Default true."
14136
+ "description": "Also search individually accepted shares. Default true. Exact note metadata filters exclude shares without accessible metadata."
13726
14137
  }
13727
14138
  },
13728
14139
  "required": [
@@ -13735,19 +14146,81 @@
13735
14146
  "type": "object",
13736
14147
  "properties": {
13737
14148
  "ok": {
13738
- "type": "boolean",
13739
- "description": "True when the search ran; false on auth/scope or backend error."
14149
+ "type": "boolean"
13740
14150
  },
13741
14151
  "vault": {
13742
- "type": "string",
13743
- "description": "Present only when a single vault was searched (vault was given). Absent when every entitled vault was searched — use each result's own \"vault\" field instead."
14152
+ "type": "string"
13744
14153
  },
13745
14154
  "vaultsSearched": {
13746
14155
  "type": "array",
13747
14156
  "items": {
13748
14157
  "type": "string"
14158
+ }
14159
+ },
14160
+ "planner": {
14161
+ "type": "object",
14162
+ "properties": {
14163
+ "queryVariants": {
14164
+ "type": "array",
14165
+ "items": {
14166
+ "type": "string"
14167
+ }
14168
+ },
14169
+ "candidatePool": {
14170
+ "type": "number"
14171
+ },
14172
+ "graphSeedCount": {
14173
+ "type": "number"
14174
+ },
14175
+ "graphDepth": {
14176
+ "type": "number"
14177
+ },
14178
+ "graphNeighborsPerSeed": {
14179
+ "type": "number"
14180
+ },
14181
+ "rerankTopN": {
14182
+ "type": "number"
14183
+ },
14184
+ "seeds": {
14185
+ "type": "array",
14186
+ "items": {
14187
+ "type": "string"
14188
+ }
14189
+ },
14190
+ "graphCandidatesAdded": {
14191
+ "type": "number"
14192
+ }
14193
+ },
14194
+ "required": [
14195
+ "queryVariants",
14196
+ "candidatePool",
14197
+ "graphSeedCount",
14198
+ "graphDepth",
14199
+ "graphNeighborsPerSeed",
14200
+ "rerankTopN",
14201
+ "seeds",
14202
+ "graphCandidatesAdded"
14203
+ ],
14204
+ "additionalProperties": false
14205
+ },
14206
+ "rerank": {
14207
+ "type": "object",
14208
+ "properties": {
14209
+ "applied": {
14210
+ "type": "boolean"
14211
+ },
14212
+ "provider": {
14213
+ "type": "string"
14214
+ },
14215
+ "fallbackReason": {
14216
+ "type": "string"
14217
+ }
13749
14218
  },
13750
- "description": "Every vault handle included in this search."
14219
+ "required": [
14220
+ "applied",
14221
+ "provider"
14222
+ ],
14223
+ "additionalProperties": false
13751
14224
  },
13752
14225
  "results": {
13753
14226
  "type": "array",
@@ -13755,42 +14228,68 @@
13755
14228
  "type": "object",
13756
14229
  "properties": {
13757
14230
  "text": {
13758
- "type": "string",
13759
- "description": "The matching text chunk. Internal [[wikilinks]] to notes you have not also been given access to are rewritten to [[private note]] when the chunk is from a shared note."
14231
+ "type": "string"
13760
14232
  },
13761
14233
  "source": {
13762
- "type": "string",
13763
- "description": "Source attribution for the chunk (e.g. note:path or library:source) — the part after the colon is usually the note path, addressable on memory-get with the vault below."
14234
+ "type": "string"
13764
14235
  },
13765
14236
  "score": {
13766
- "type": "number",
13767
- "description": "Similarity score; higher means more relevant to the query."
14237
+ "type": "number"
14238
+ },
14239
+ "originalScore": {
14240
+ "type": "number"
14241
+ },
14242
+ "rerankScore": {
14243
+ "type": "number"
13768
14244
  },
13769
14245
  "vault": {
13770
- "type": "string",
13771
- "description": "The vault handle this result came from — pass straight to memory-get/memory-list. Absent on individually-shared results (use shareId instead)."
14246
+ "type": "string"
13772
14247
  },
13773
14248
  "sharedBy": {
13774
- "type": "string",
13775
- "description": "Present only on results from a note shared with you (not your own vault): the identity who owns it. Treat as untrusted, like any shared content."
14249
+ "type": "string"
13776
14250
  },
13777
14251
  "shareId": {
13778
- "type": "string",
13779
- "description": "Present only on shared-origin results: the shareId, addressable on memory-get for the full note."
14252
+ "type": "string"
14253
+ },
14254
+ "matchChannels": {
14255
+ "type": "array",
14256
+ "items": {
14257
+ "type": "string",
14258
+ "enum": [
14259
+ "semantic",
14260
+ "tag",
14261
+ "metadata",
14262
+ "graph"
14263
+ ]
14264
+ }
14265
+ },
14266
+ "matchedQueries": {
14267
+ "type": "array",
14268
+ "items": {
14269
+ "type": "string"
14270
+ }
14271
+ },
14272
+ "graphFrom": {
14273
+ "type": "array",
14274
+ "items": {
14275
+ "type": "string"
14276
+ }
13780
14277
  }
13781
14278
  },
13782
14279
  "required": [
13783
14280
  "text",
13784
14281
  "source",
13785
- "score"
14282
+ "score",
14283
+ "originalScore",
14284
+ "matchChannels",
14285
+ "matchedQueries",
14286
+ "graphFrom"
13786
14287
  ],
13787
14288
  "additionalProperties": false
13788
- },
13789
- "description": "Most-relevant chunks ordered by score, across every vault searched plus accepted shares. Present when ok is true; may be empty."
14289
+ }
13790
14290
  },
13791
14291
  "error": {
13792
- "type": "string",
13793
- "description": "Human-readable failure reason when ok is false."
14292
+ "type": "string"
13794
14293
  }
13795
14294
  },
13796
14295
  "required": [
@@ -13800,7 +14299,7 @@
13800
14299
  "$schema": "http://json-schema.org/draft-07/schema#"
13801
14300
  },
13802
14301
  "annotations": {
13803
- "title": "Semantic Memory Search",
14302
+ "title": "Hybrid Smart RAG Memory Search",
13804
14303
  "readOnlyHint": true,
13805
14304
  "destructiveHint": false,
13806
14305
  "idempotentHint": true,
@@ -14591,7 +15090,7 @@
14591
15090
  {
14592
15091
  "name": "prepare-memory-write",
14593
15092
  "title": "Prepare Memory Write",
14594
- "description": "Mandatory planning pass for a normal new memory. Routes the note, returns the live template and natural vault relationships, resolves proposed tags against the registry, and shortlists interlink opportunities that must be read/reviewed before capture.",
15093
+ "description": "Mandatory planning pass for a normal new memory. First inspect the complete tag vocabulary with list-memory-tags; then this pass routes the note, returns the live template and natural vault relationships, resolves proposed tags, and shortlists interlinks. Use hybrid memory-search (3 focused queries, 50 fused candidates, bounded graph expansion, rerank to 30 by default) and read strong related notes before capture. This is an explicit AI workflow directive, not a claim of persisted call-order enforcement.",
14595
15094
  "inputSchema": {
14596
15095
  "type": "object",
14597
15096
  "properties": {
@@ -14709,7 +15208,7 @@
14709
15208
  {
14710
15209
  "name": "propose-scheduled-action",
14711
15210
  "title": "Propose Scheduled Action",
14712
- "description": "Turn freeform text describing what you want automated into a structured proposal (description, vault, cadence) for review and confirmation via create-scheduled-action — this is the propose step only; nothing is created here.",
15211
+ "description": "Turn freeform text describing what you want automated into a structured proposal (description, vault, cadence, time of day, timezone) for review and confirmation via create-scheduled-action — this is the propose step only; nothing is created here.",
14713
15212
  "inputSchema": {
14714
15213
  "type": "object",
14715
15214
  "properties": {
@@ -14743,6 +15242,14 @@
14743
15242
  "type": "string",
14744
15243
  "description": "Proposed cadence: once, daily, weekly, or monthly."
14745
15244
  },
15245
+ "timeOfDay": {
15246
+ "type": "string",
15247
+ "description": "Proposed 24-hour HH:MM run time, when the request named one."
15248
+ },
15249
+ "timezone": {
15250
+ "type": "string",
15251
+ "description": "Proposed IANA timezone — from the request, or the account default when the request named a time without a zone."
15252
+ },
14746
15253
  "rationale": {
14747
15254
  "type": "string",
14748
15255
  "description": "Why these choices were made — read this before confirming."
@@ -14771,18 +15278,18 @@
14771
15278
  {
14772
15279
  "name": "provision-defaults",
14773
15280
  "title": "Provision Default Vaults",
14774
- "description": "Provision the standard 13-vault memory structure (Ideas, Inspiration, Knowledge, Library, People, Communications, Calendar, Tasks, Projects, Issues, Improvement Log, Experiments, Sprint) for an identity. Idempotent — existing vaults are untouched. Optionally issues a fresh API key entitled to all 13. Requires admin scope.",
15281
+ "description": "Provision the standard 14-vault memory structure (Ideas, Inspiration, Knowledge, Library, People, Communications, Calendar, Tasks, Projects, Issues, Improvement Log, Experiments, Sprint, Skills) for an identity. Idempotent — existing vaults are untouched. Optionally issues a fresh API key entitled to all 14. Requires admin scope.",
14775
15282
  "inputSchema": {
14776
15283
  "type": "object",
14777
15284
  "properties": {
14778
15285
  "granteeIdentity": {
14779
15286
  "type": "string",
14780
15287
  "minLength": 1,
14781
- "description": "Identity that should OWN the 13 default vaults (e.g. an email or user id)."
15288
+ "description": "Identity that should OWN the 14 default vaults (e.g. an email or user id)."
14782
15289
  },
14783
15290
  "issueKey": {
14784
15291
  "type": "boolean",
14785
- "description": "When true, also issue a new API key for the identity entitled to all 13 vaults and return its secret once. Default false."
15292
+ "description": "When true, also issue a new API key for the identity entitled to all 14 vaults and return its secret once. Default false."
14786
15293
  },
14787
15294
  "plan": {
14788
15295
  "type": "string",
@@ -14817,14 +15324,14 @@
14817
15324
  "items": {
14818
15325
  "type": "string"
14819
15326
  },
14820
- "description": "Vault names newly created on this call (empty when all 13 already existed)."
15327
+ "description": "Vault names newly created on this call (empty when all 14 already existed)."
14821
15328
  },
14822
15329
  "vaults": {
14823
15330
  "type": "array",
14824
15331
  "items": {
14825
15332
  "type": "string"
14826
15333
  },
14827
- "description": "All 13 default vault names the identity now owns."
15334
+ "description": "All 14 default vault names the identity now owns."
14828
15335
  },
14829
15336
  "keyId": {
14830
15337
  "type": "string",
@@ -16285,7 +16792,7 @@
16285
16792
  {
16286
16793
  "name": "resolve-memory-tags",
16287
16794
  "title": "Resolve Memory Tags",
16288
- "description": "Resolve proposed concepts against the live tag vocabulary. Returns reuse, create, or omit. A new tag is allowed only when no equivalent exists and the caller marks the concept central and reusable.",
16795
+ "description": "Resolve proposed concepts against the live tag vocabulary. Always inspect the complete vocabulary with list-memory-tags first. Returns reuse, create, or omit; a new tag is appropriate only when no equivalent exists and the concept is central and reusable.",
16289
16796
  "inputSchema": {
16290
16797
  "type": "object",
16291
16798
  "properties": {
@@ -16399,7 +16906,7 @@
16399
16906
  {
16400
16907
  "name": "resume-scheduled-action",
16401
16908
  "title": "Resume Scheduled Action",
16402
- "description": "Resume a paused scheduled action. Its next run is computed fresh from now, not backfilled for time spent paused.",
16909
+ "description": "Resume a paused scheduled action for an active MCP Scraper Starter plan or higher. Its next run is computed fresh from now, not backfilled for time spent paused.",
16403
16910
  "inputSchema": {
16404
16911
  "type": "object",
16405
16912
  "properties": {
@@ -17061,10 +17568,65 @@
17061
17568
  "taskSupport": "forbidden"
17062
17569
  }
17063
17570
  },
17571
+ {
17572
+ "name": "set-schedule-defaults",
17573
+ "title": "Set Schedule Defaults",
17574
+ "description": "Set your default timezone for scheduled actions. Any schedule you later create with a time of day but no explicit timezone uses this default instead of UTC. Pass null to clear it back to UTC.",
17575
+ "inputSchema": {
17576
+ "type": "object",
17577
+ "properties": {
17578
+ "defaultTimezone": {
17579
+ "type": [
17580
+ "string",
17581
+ "null"
17582
+ ],
17583
+ "description": "IANA timezone name, e.g. \"America/Denver\". null clears the default (new schedules fall back to UTC)."
17584
+ }
17585
+ },
17586
+ "required": [
17587
+ "defaultTimezone"
17588
+ ],
17589
+ "additionalProperties": false,
17590
+ "$schema": "http://json-schema.org/draft-07/schema#"
17591
+ },
17592
+ "outputSchema": {
17593
+ "type": "object",
17594
+ "properties": {
17595
+ "ok": {
17596
+ "type": "boolean"
17597
+ },
17598
+ "defaultTimezone": {
17599
+ "type": [
17600
+ "string",
17601
+ "null"
17602
+ ],
17603
+ "description": "The default timezone now in effect; null means UTC."
17604
+ },
17605
+ "error": {
17606
+ "type": "string"
17607
+ }
17608
+ },
17609
+ "required": [
17610
+ "ok"
17611
+ ],
17612
+ "additionalProperties": false,
17613
+ "$schema": "http://json-schema.org/draft-07/schema#"
17614
+ },
17615
+ "annotations": {
17616
+ "title": "Set Schedule Defaults",
17617
+ "readOnlyHint": false,
17618
+ "destructiveHint": false,
17619
+ "idempotentHint": true,
17620
+ "openWorldHint": false
17621
+ },
17622
+ "execution": {
17623
+ "taskSupport": "forbidden"
17624
+ }
17625
+ },
17064
17626
  {
17065
17627
  "name": "set-schedule-entitlement",
17066
17628
  "title": "Set Schedule Entitlement",
17067
- "description": "Admin-only scheduled-action credential provisioning and historical-row recovery. Rotate the encrypted delegated MCP Scraper API key without changing legacy enabled/quota fields by omitting those fields. Legacy entitlement values are not runtime access controls; paid-plan access is checked against MCP Scraper directly.",
17629
+ "description": "Admin-only scheduled-action credential provisioning and historical-row recovery. Use mcpScraperApiKey to rotate the encrypted delegated key without changing legacy enabled/quota fields. The former entitlement and quota values are retained only for migration compatibility and are not runtime access controls; paid-plan access is validated against MCP Scraper directly.",
17068
17630
  "inputSchema": {
17069
17631
  "type": "object",
17070
17632
  "properties": {
@@ -17079,7 +17641,7 @@
17079
17641
  },
17080
17642
  "quotaPerPeriod": {
17081
17643
  "type": "number",
17082
- "description": "Historical monthly execution quota retained only for migration compatibility. Omit to preserve the stored value."
17644
+ "description": "Historical monthly quota for migration/recovery only. Omit to preserve the stored value."
17083
17645
  },
17084
17646
  "mcpScraperApiKey": {
17085
17647
  "type": "string",
@@ -17975,6 +18537,78 @@
17975
18537
  "taskSupport": "forbidden"
17976
18538
  }
17977
18539
  },
18540
+ {
18541
+ "name": "test_service_connection",
18542
+ "title": "Test Connected Service",
18543
+ "description": "Test the current provider transport for one tenant-owned connection without changing its OAuth lifecycle. Call this when a connected account appears unavailable before recommending reconnect. Reconnect is appropriate only when reconnectRequired is true.",
18544
+ "inputSchema": {
18545
+ "type": "object",
18546
+ "properties": {
18547
+ "connectionId": {
18548
+ "type": "string",
18549
+ "minLength": 1,
18550
+ "description": "A tenant-owned connectionId from list_service_connections."
18551
+ },
18552
+ "providerConfigKey": {
18553
+ "type": "string",
18554
+ "minLength": 1,
18555
+ "description": "Optional provider hint from list_service_connections."
18556
+ }
18557
+ },
18558
+ "required": [
18559
+ "connectionId"
18560
+ ],
18561
+ "additionalProperties": false,
18562
+ "$schema": "http://json-schema.org/draft-07/schema#"
18563
+ },
18564
+ "outputSchema": {
18565
+ "type": "object",
18566
+ "properties": {
18567
+ "ok": {
18568
+ "type": "boolean"
18569
+ },
18570
+ "operationalStatus": {
18571
+ "type": "string",
18572
+ "enum": [
18573
+ "available",
18574
+ "unavailable"
18575
+ ]
18576
+ },
18577
+ "checkedAt": {
18578
+ "type": "string"
18579
+ },
18580
+ "toolCount": {
18581
+ "type": "integer",
18582
+ "minimum": 0
18583
+ },
18584
+ "code": {
18585
+ "type": "string"
18586
+ },
18587
+ "error": {
18588
+ "type": [
18589
+ "string",
18590
+ "null"
18591
+ ]
18592
+ }
18593
+ },
18594
+ "required": [
18595
+ "ok",
18596
+ "error"
18597
+ ],
18598
+ "additionalProperties": false,
18599
+ "$schema": "http://json-schema.org/draft-07/schema#"
18600
+ },
18601
+ "annotations": {
18602
+ "title": "Test Connected Service",
18603
+ "readOnlyHint": true,
18604
+ "destructiveHint": false,
18605
+ "idempotentHint": true,
18606
+ "openWorldHint": true
18607
+ },
18608
+ "execution": {
18609
+ "taskSupport": "forbidden"
18610
+ }
18611
+ },
17978
18612
  {
17979
18613
  "name": "trustpilot_reviews",
17980
18614
  "title": "Trustpilot Review Harvest",
@@ -18219,7 +18853,7 @@
18219
18853
  {
18220
18854
  "name": "upsert-memory-tag",
18221
18855
  "title": "Upsert Memory Tag",
18222
- "description": "Define or curate one canonical tag, its meaning, aliases, and lifecycle. Use only after resolve-memory-tags returns create, or to merge/deprecate vocabulary intentionally. Requires write scope.",
18856
+ "description": "Define or curate one canonical tag, its meaning, aliases, and lifecycle. Inspect the complete vocabulary with list-memory-tags first; use only after resolve-memory-tags returns create, or to merge/deprecate vocabulary intentionally. Requires write scope.",
18223
18857
  "inputSchema": {
18224
18858
  "type": "object",
18225
18859
  "properties": {
@@ -18400,6 +19034,27 @@
18400
19034
  "type": "string",
18401
19035
  "description": "Explicit sub-folder within the vault; overrides routing-derived folder."
18402
19036
  },
19037
+ "script_links": {
19038
+ "type": "array",
19039
+ "items": {
19040
+ "type": "string"
19041
+ },
19042
+ "description": "Skills only: one or more Obsidian/internal paths under scripts/."
19043
+ },
19044
+ "reference_links": {
19045
+ "type": "array",
19046
+ "items": {
19047
+ "type": "string"
19048
+ },
19049
+ "description": "Skills only: optional Obsidian/internal paths under references/."
19050
+ },
19051
+ "template_links": {
19052
+ "type": "array",
19053
+ "items": {
19054
+ "type": "string"
19055
+ },
19056
+ "description": "Skills only: optional Obsidian/internal paths under templates/."
19057
+ },
18403
19058
  "parentMessageId": {
18404
19059
  "type": "string",
18405
19060
  "description": "Channel messages only: the path of the top-level message this is a reply to. Absent on top-level messages."
@@ -18685,14 +19340,14 @@
18685
19340
  {
18686
19341
  "name": "video-analyze-start",
18687
19342
  "title": "Start Video Breakdown",
18688
- "description": "Start a deep async breakdown of a video: samples frames, transcribes audio, and runs parallel analyses (summary, pacing, WPM, topic outline, key points, hook analysis, visual style, replication recipe) into one saved report. Returns a runId immediately — poll video-analyze-status. Pass a direct video file URL (.mp4/.webm/.mov); platform URLs are not auto-resolved yet. Videos up to 1 hour.",
19343
+ "description": "Start a deep async breakdown of a video: samples frames, transcribes audio, and runs parallel analyses (summary, pacing, WPM, topic outline, key points, hook analysis, visual style, replication recipe) into one saved report. Returns a runId immediately — poll video-analyze-status. Accepts a YouTube, Facebook, Instagram, TikTok, or Vimeo URL directly (downloaded for you), or a direct video file URL (.mp4/.webm/.mov). Videos up to 1 hour.",
18689
19344
  "inputSchema": {
18690
19345
  "type": "object",
18691
19346
  "properties": {
18692
19347
  "sourceUrl": {
18693
19348
  "type": "string",
18694
19349
  "format": "uri",
18695
- "description": "Direct URL to the video file (.mp4/.webm/.mov/.gif)."
19350
+ "description": "A YouTube, Facebook, Instagram, TikTok, or Vimeo URL (downloaded automatically), or a direct video file URL (.mp4/.webm/.mov/.gif)."
18696
19351
  },
18697
19352
  "intervalS": {
18698
19353
  "type": "number",