@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.
- package/README.md +33 -1
- package/SECURITY.md +97 -0
- package/build/api/client.d.ts +264 -43
- package/build/api/client.d.ts.map +1 -1
- package/build/api/client.js +202 -38
- package/build/api/client.js.map +1 -1
- package/build/help/topics.d.ts.map +1 -1
- package/build/help/topics.js +116 -1
- package/build/help/topics.js.map +1 -1
- package/build/tools/index.d.ts +2861 -636
- package/build/tools/index.d.ts.map +1 -1
- package/build/tools/index.js +636 -59
- package/build/tools/index.js.map +1 -1
- package/package.json +4 -3
package/build/help/topics.js
CHANGED
|
@@ -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: \`\`. 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.
|
package/build/help/topics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topics.js","sourceRoot":"","sources":["../../src/help/topics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,+BAA+B,EAAE,MAAM,iCAAiC,CAAC;AAClF,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAE5E,MAAM,CAAC,MAAM,WAAW,GAA2B;IACjD,QAAQ,EAAE
|
|
1
|
+
{"version":3,"file":"topics.js","sourceRoot":"","sources":["../../src/help/topics.ts"],"names":[],"mappings":"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"}
|