@nestr/mcp 0.1.105 → 0.1.107

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.
@@ -20,7 +20,8 @@ The internal topics below are curated MCP-flavoured guidance — tool call patte
20
20
  - core-concepts: Workspace, nest, circle, role, label basics and content format
21
21
  - nest-model: Nest fields, hierarchy, hints, and fieldsMetaData
22
22
  - labels: Important labels, label architecture, and field schema customization
23
- - search: Full search query syntax with all operators and examples
23
+ - search: Full search query syntax with all operators and examples, including strict:true
24
+ - api-surface: nestr_api_spec, for checking whether an endpoint exists at all
24
25
  - fields: Adding custom fields to labels when Nestr has no field for something yet
25
26
  - web-app-links: Every web-app URL shape, the content tab hashes, and the two-pane hash form
26
27
  - workspace-settings: Where workspace settings are, every tab, and the link to hand over
@@ -468,6 +469,37 @@ Example response with hints:
468
469
  }
469
470
  \`\`\`
470
471
 
472
+ **Hints have a level, and a listing should not ask for the expensive one.** \`hints\` takes
473
+ \`'full'\`, \`'summary'\` or \`false\`. \`summary\` keeps everything that varies per nest — type,
474
+ severity, count, url, and the \`query\` below — and drops the two things identical for every
475
+ nest of that type: \`detail\`, the teaching paragraph, and \`endpoints\`. A page of fifty nests
476
+ at \`full\` carries fifty copies of one paragraph; \`nestr_help\` carries it once, and
477
+ \`helpTopic\` on the hint names which topic. Single reads default to \`full\`, listings to
478
+ \`summary\`. Narrow further with \`hintTypes\` and \`minSeverity\`.
479
+
480
+ **A hint can tell you how to find every other nest with the same problem.** Where the
481
+ predicate is expressible as a search, the hint carries a \`query\`:
482
+
483
+ \`\`\`json
484
+ { "type": "project_waiting_no_reason", "severity": "warning",
485
+ "query": {
486
+ "search": "label:project fields.project.status:Waiting fields.project.waiting_reason:!exists",
487
+ "scope": "<circleId>", "url": "https://.../api/nests/<circleId>/search?search=...",
488
+ "exact": false,
489
+ "caveat": "A reason saved as empty markup triggers the hint but is not matched by !exists." } }
490
+ \`\`\`
491
+
492
+ Read \`exact\` before you trust a count from it. \`true\` means the search reproduces the hint's
493
+ predicate; \`false\` means it gets close and \`caveat\` says which way it is wrong. Where the
494
+ predicate cannot be expressed at all there is no \`query\` — deliberately, because a search
495
+ that quietly disagrees with its hint is worse than none.
496
+
497
+ **To count rather than to list, use \`nestr_hints_rollup\`.** It returns how many nests under
498
+ a circle or workspace carry each hint type, with a small sample, in one call instead of one
499
+ per nest. Read its \`notComputed\`: it names the types it cannot count in a single query, so a
500
+ type listed there is unknown, not zero. Do not sum counts across types — one nest can carry
501
+ several.
502
+
471
503
  **Inline images.** An image pasted into a nest's text is stored as a file and left in the
472
504
  content as a markdown reference: \`![name](/file/download?id=FILE_ID&name=NAME)\`. These are
473
505
  deliberately absent from \`nestr_get_nest_files\`, because they belong to the text rather than
@@ -692,6 +724,26 @@ The \`nestr_search\` tool supports powerful query operators. Combine multiple op
692
724
  | \`groupby:\` | \`groupby:parent\` | Group results into sections (app + tabs; inert here) |
693
725
  | \`groupbycol:\` | \`groupbycol:project->status\` | Same grouping as board columns — see "Grouping and Layout" below |
694
726
 
727
+ ### Knowing your filter applied: \`strict:true\`
728
+
729
+ An operator this parser does not recognise, an unknown label, or a field filter naming a
730
+ field that does not exist are all **dropped silently**. The search still runs, returns a
731
+ broader result, and nothing says a filter went missing. Fine when browsing, wrong when
732
+ counting: a mistyped filter reads as a real, larger answer.
733
+
734
+ Add \`strict:true\` and any dropped term becomes an error instead:
735
+
736
+ \`\`\`
737
+ label:project fields.project.stauts:Waiting strict:true
738
+ -> rejected, naming the unknown field, instead of returning every project
739
+ \`\`\`
740
+
741
+ \`nestr_search\` also takes \`strict: true\` as a parameter, which appends the operator for you.
742
+ Use it whenever the number matters: counting, reporting, or deciding something on the result.
743
+
744
+ For "does this deployment have X at all", \`strict:true\` answers it for the search language
745
+ and \`nestr_api_spec\` answers it for the HTTP surface.
746
+
695
747
  ### The \`has:\` Operator
696
748
 
697
749
  The \`has:\` operator checks for property existence. Supports \`!\` prefix for negation (e.g., \`has:!due\`).
@@ -707,6 +759,10 @@ The \`has:\` operator checks for property existence. Supports \`!\` prefix for n
707
759
  - \`has:tabs\` - Items with tabs configured
708
760
  - \`has:header\` - Items with a header
709
761
 
762
+ An unlisted value is not an error: \`has:<x>\` falls through to the nest property \`_p.<x>\`,
763
+ so \`has:completable\` (items that can be completed) and \`has:eventable\` both work. The names
764
+ above are the ones with special handling, not the whole set.
765
+
710
766
  ### Field Value Search
711
767
 
712
768
  Search by label-specific field values using \`label->field:value\`:
@@ -911,6 +967,24 @@ in:roleId label:project project->status:Current
911
967
  - All work in a circle: \`in:circleId completed:false\` (includes all nested items)
912
968
  - Direct tasks under a project: \`in:projectId depth:1 completed:false\`
913
969
 
970
+ **Two ways to scope, and when to use which.** \`in:nestId\` scopes a workspace-wide
971
+ \`nestr_search\`. \`nestr_get_nest_children\` takes a \`search\` that is already scoped to that
972
+ nest, so the same question is shorter:
973
+
974
+ \`\`\`
975
+ nestr_search({ query: "in:circleId label:role depth:1" })
976
+ nestr_get_nest_children({ nestId: circleId, search: "label:role" })
977
+ -> the same roles
978
+ \`\`\`
979
+
980
+ The children route applies \`depth:1\` when your query sets no depth, and says so in
981
+ \`appliedDefaults\` on the response, which also names how to widen it. Reach for it when you
982
+ already hold the nest id; reach for \`in:\` when you are composing one query across several
983
+ scopes.
984
+
985
+ Either way, ask for the subset you want rather than fetching a mixed set and sorting it
986
+ out afterwards. "What type is this nest" is a question you can avoid asking.
987
+
914
988
  ### Filtering by Completion Status
915
989
 
916
990
  **Important:** When fetching work items (tasks, projects), always use \`completed:false\` unless you specifically need completed items. This avoids cluttering results with old completed work.
@@ -1324,6 +1398,47 @@ When a user asks about trends or patterns (e.g., "Are we getting better at gover
1324
1398
  - **All plans**: Workspace-level insights (aggregated across the whole organization)
1325
1399
  - **Pro plan only**: Circle-level insights (\`nestId\` parameter) and user-level insights (\`userId\` parameter). If the workspace is not on a Pro plan, these filters will return a 402 error.
1326
1400
  - \`userId\` and \`nestId\` cannot be combined — user metrics are always workspace-level.`,
1401
+ "api-surface": `## Checking whether the API has something
1402
+
1403
+ There is a difference between "I did not find it" and "it is not there", and only the
1404
+ second is safe to act on. \`nestr_api_spec\` is how you get the second.
1405
+
1406
+ It returns this deployment's own OpenAPI document, reduced to something readable:
1407
+
1408
+ - **No arguments**: the operation index. Method, path, and a one-line summary for every
1409
+ operation the deployment serves, plus \`totalOperations\`.
1410
+ - **\`search\`**: filter that index by keyword against path and summary. The counts are the
1411
+ answer as much as the rows are. \`matchedOperations: 0\` out of \`totalOperations: 94\` for
1412
+ "duration" means this API has nothing about duration, full stop.
1413
+ - **\`path\`**: the full schema for one operation, including every parameter it accepts and
1414
+ what each does. Use this before assuming a parameter exists.
1415
+
1416
+ ### When to reach for it
1417
+
1418
+ - A user asks whether Nestr can do X through the API and you are about to say "I do not
1419
+ think so". Check first, then say it with certainty.
1420
+ - You are about to pass a parameter you have not seen documented. \`path\` tells you whether
1421
+ it exists rather than having it silently ignored.
1422
+ - Something is missing and you need to say whether it is unsupported or merely not exposed
1423
+ through a tool. Those are different answers with different next steps.
1424
+
1425
+ ### The neighbouring questions
1426
+
1427
+ \`nestr_api_spec\` answers "does the HTTP surface have this". Two others answer nearby
1428
+ questions, and mixing them up wastes a call:
1429
+
1430
+ - **Does my search filter apply?** \`strict: true\` on \`nestr_search\`. An unrecognised
1431
+ operator or field is otherwise dropped silently and the search returns a broader result.
1432
+ See \`nestr_help('search')\`.
1433
+ - **Does this label have this field?** \`nestr_get_label\` returns a label's fields with their
1434
+ codes, types and options. That is the data model rather than the HTTP surface, so a field
1435
+ can exist here and have no dedicated endpoint.
1436
+
1437
+ ### What it does not tell you
1438
+
1439
+ The spec describes routes, not permissions. An operation being listed does not mean this
1440
+ caller may call it: read-only keys, key profiles and per-nest rights all still apply. For
1441
+ "why can I not do this", use \`nestr_explain_nest\`; for auth failures, \`nestr_diagnose\`.`,
1327
1442
  "mcp-apps": `## MCP Apps (Interactive UI)
1328
1443
 
1329
1444
  Nestr provides interactive UI components that can be embedded in MCP clients that support the \`ui://\` resource protocol.
@@ -1 +1 @@
1
- {"version":3,"file":"topics.js","sourceRoot":"","sources":["../../src/help/topics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"topics.js","sourceRoot":"","sources":["../../src/help/topics.ts"],"names":[],"mappings":"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"}