@nestr/mcp 0.1.45 → 0.1.46

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAiB,KAAK,WAAW,EAA6C,MAAM,kBAAkB,CAAC;AA+E9G,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiXnB,CAAC;AAQF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA66B3B,CAAC;AAGF,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAuBF,wBAAsB,cAAc,CAClC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,UAAU,CAAC,CAcrB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAiB,KAAK,WAAW,EAA6C,MAAM,kBAAkB,CAAC;AA+E9G,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAianB,CAAC;AAQF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmhC3B,CAAC;AAGF,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAuBF,wBAAsB,cAAc,CAClC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,UAAU,CAAC,CAcrB"}
@@ -77,7 +77,7 @@ export const schemas = {
77
77
  }),
78
78
  createWorkspace: z.object({
79
79
  title: z.string().describe("Workspace name"),
80
- purpose: z.string().optional().describe("Workspace purpose or description"),
80
+ purpose: z.string().optional().describe("Workspace purpose the aspirational future state of the organization. Defines the north star that all circles and roles serve."),
81
81
  type: z.enum(['personal', 'collaborative']).optional().describe("'personal' for individual use (free forever), 'collaborative' for team use (free trial, then paid). Defaults to 'collaborative'."),
82
82
  governance: z.enum(['holacracy', 'sociocracy', 'roles_circles']).optional().describe("Self-organization model. Defaults to 'roles_circles' (generic role-based)."),
83
83
  plan: z.enum(['starter', 'pro']).optional().describe("Subscription plan for collaborative workspaces. Defaults to 'pro' (17-day trial)."),
@@ -104,8 +104,8 @@ export const schemas = {
104
104
  createNest: z.object({
105
105
  parentId: z.string().describe("Parent nest ID (workspace, circle, or project)"),
106
106
  title: z.string().describe("Title of the new nest (plain text, HTML stripped)"),
107
- purpose: z.string().optional().describe("Purpose - why this nest exists (supports HTML: <b>, <i>, <code>, <ul>, <li>, <a>)"),
108
- description: z.string().optional().describe("Detailed description (supports HTML: <b>, <i>, <code>, <ul>, <li>, <a>)"),
107
+ purpose: z.string().optional().describe("Purpose the aspirational future state this nest is working towards. Most important for workspaces, circles, and roles where it defines the north star and context boundary. For other nests, prefer description or fields for detailed information — but purpose can be set if meaningful. Supports HTML."),
108
+ description: z.string().optional().describe("Detailed description the primary field for storing information about a nest. Use for project details, task context, acceptance criteria, Definition of Done, etc. Supports HTML: <b>, <i>, <code>, <ul>, <li>, <a>."),
109
109
  labels: z.array(z.string()).optional().describe("Label IDs to apply"),
110
110
  users: z.array(z.string()).optional().describe("User IDs to assign (required for tasks/projects to associate with a person)"),
111
111
  accountabilities: z.array(z.string()).optional().describe("Accountability titles for roles/circles. Only used when labels include 'role' or 'circle'. Each string becomes an accountability child nest."),
@@ -115,8 +115,8 @@ export const schemas = {
115
115
  updateNest: z.object({
116
116
  nestId: z.string().describe("Nest ID to update"),
117
117
  title: z.string().optional().describe("New title (plain text, HTML stripped)"),
118
- purpose: z.string().optional().describe("New purpose (supports HTML: <b>, <i>, <code>, <ul>, <li>, <a>)"),
119
- description: z.string().optional().describe("New description (supports HTML: <b>, <i>, <code>, <ul>, <li>, <a>)"),
118
+ purpose: z.string().optional().describe("New purpose the aspirational future state. Most important for workspaces, circles, and roles. For other nests, prefer description or fields — but purpose can be set if meaningful. Supports HTML."),
119
+ description: z.string().optional().describe("New description the primary field for detailed information. Use for project details, task context, acceptance criteria, etc. Supports HTML."),
120
120
  parentId: z.string().optional().describe("New parent ID (move nest to different location, e.g., move inbox item to a role or project)"),
121
121
  labels: z.array(z.string()).optional().describe("Label IDs to set (e.g., ['project'] to convert an item into a project)"),
122
122
  fields: z.record(z.unknown()).optional().describe("Field updates (e.g., { 'project.status': 'Current' })"),
@@ -295,7 +295,7 @@ export const schemas = {
295
295
  markNotificationsRead: z.object({}),
296
296
  // Tension tools
297
297
  createTension: z.object({
298
- nestId: z.string().describe("ID of the circle or role to create the tension on"),
298
+ nestId: z.string().describe("ID of the role or circle to create the tension on. Use a role ID when that role is sensing the tension. Use a circle ID for cross-role, governance, or personally sensed tensions."),
299
299
  title: z.string().describe("The gap you're sensing — what is the difference between current reality and desired state (plain text)"),
300
300
  description: z.string().optional().describe("The observable facts — what you see/hear/experience that creates this tension (supports HTML)"),
301
301
  feeling: z.string().optional().describe("The feeling this tension evokes in you — separated from the facts to keep the organizational response clean (plain text)"),
@@ -333,35 +333,58 @@ export const schemas = {
333
333
  _id: z.string().optional().describe("ID of an existing governance item to change or remove. Omit to propose a new item."),
334
334
  title: z.string().optional().describe("Title for the governance item"),
335
335
  labels: z.array(z.string()).optional().describe("Labels defining the item type (e.g., ['role'], ['circle'], ['policy'], ['accountability'], ['domain'])"),
336
- purpose: z.string().optional().describe("Purpose of the item (supports HTML)"),
337
- description: z.string().optional().describe("Description (supports HTML)"),
336
+ purpose: z.string().optional().describe("Purpose aspirational future state. Most important for roles/circles where it defines the north star. Supports HTML."),
337
+ description: z.string().optional().describe("Description detailed information about the item. Supports HTML."),
338
338
  parentId: z.string().optional().describe("Parent ID — use to move/restructure items (e.g., move role to different circle)"),
339
339
  users: z.array(z.string()).optional().describe("User IDs to assign (e.g., for role elections: assign the elected user to the role)"),
340
340
  due: z.string().optional().describe("Due date / re-election date (ISO format)"),
341
- accountabilities: z.array(z.string()).optional().describe("Accountability titles to set on a role (replaces existing)"),
342
- domains: z.array(z.string()).optional().describe("Domain titles to set on a role (replaces existing)"),
343
- removeNest: z.boolean().optional().describe("Set to true with _id to propose removal of the existing governance item"),
341
+ accountabilities: z.array(z.string()).optional().describe("Accountability titles to set on a role (replaces all — use children endpoint for individual management)"),
342
+ domains: z.array(z.string()).optional().describe("Domain titles to set on a role (replaces all — use children endpoint for individual management)"),
344
343
  }),
345
344
  modifyTensionPart: z.object({
346
345
  nestId: z.string().describe("ID of the circle or role the tension belongs to"),
347
346
  tensionId: z.string().describe("Tension ID"),
348
347
  partId: z.string().describe("Part ID to modify"),
349
348
  title: z.string().optional().describe("Updated title"),
350
- purpose: z.string().optional().describe("Updated purpose (supports HTML)"),
351
- description: z.string().optional().describe("Updated description (supports HTML)"),
349
+ purpose: z.string().optional().describe("Updated purpose aspirational future state. Most important for roles/circles. Supports HTML."),
350
+ description: z.string().optional().describe("Updated description detailed information. Supports HTML."),
352
351
  labels: z.array(z.string()).optional().describe("Updated labels"),
353
352
  parentId: z.string().optional().describe("Updated parent ID"),
354
353
  users: z.array(z.string()).optional().describe("Updated user assignments"),
355
354
  due: z.string().optional().describe("Updated due date (ISO format)"),
356
- removeNest: z.boolean().optional().describe("Change removal flag"),
357
- accountabilities: z.array(z.string()).optional().describe("Updated accountabilities"),
358
- domains: z.array(z.string()).optional().describe("Updated domains"),
355
+ accountabilities: z.array(z.string()).optional().describe("Updated accountabilities (replaces all — use children endpoint for individual management)"),
356
+ domains: z.array(z.string()).optional().describe("Updated domains (replaces all — use children endpoint for individual management)"),
359
357
  }),
360
358
  removeTensionPart: z.object({
361
359
  nestId: z.string().describe("ID of the circle or role the tension belongs to"),
362
360
  tensionId: z.string().describe("Tension ID"),
363
361
  partId: z.string().describe("Part ID to remove from the proposal"),
364
362
  }),
363
+ getTensionPartChildren: z.object({
364
+ nestId: z.string().describe("ID of the circle or role the tension belongs to"),
365
+ tensionId: z.string().describe("Tension ID"),
366
+ partId: z.string().describe("Part ID"),
367
+ }),
368
+ createTensionPartChild: z.object({
369
+ nestId: z.string().describe("ID of the circle or role the tension belongs to"),
370
+ tensionId: z.string().describe("Tension ID"),
371
+ partId: z.string().describe("Part ID"),
372
+ title: z.string().describe("Title for the new accountability or domain"),
373
+ labels: z.array(z.string()).describe("Labels defining the type: ['accountability'] or ['domain']"),
374
+ }),
375
+ updateTensionPartChild: z.object({
376
+ nestId: z.string().describe("ID of the circle or role the tension belongs to"),
377
+ tensionId: z.string().describe("Tension ID"),
378
+ partId: z.string().describe("Part ID"),
379
+ childId: z.string().describe("Child ID to update"),
380
+ title: z.string().describe("Updated title"),
381
+ }),
382
+ deleteTensionPartChild: z.object({
383
+ nestId: z.string().describe("ID of the circle or role the tension belongs to"),
384
+ tensionId: z.string().describe("Tension ID"),
385
+ partId: z.string().describe("Part ID"),
386
+ childId: z.string().describe("Child ID to soft-delete (will remove the original accountability/domain when enacted)"),
387
+ }),
365
388
  getTensionChanges: z.object({
366
389
  nestId: z.string().describe("ID of the circle or role the tension belongs to"),
367
390
  tensionId: z.string().describe("Tension ID"),
@@ -376,6 +399,24 @@ export const schemas = {
376
399
  tensionId: z.string().describe("Tension ID"),
377
400
  status: z.enum(["proposed", "draft"]).describe("'proposed' to submit for voting, 'draft' to retract back to draft"),
378
401
  }),
402
+ // Graph link tools
403
+ getGraphLinks: z.object({
404
+ nestId: z.string().describe("Nest ID to get graph links for"),
405
+ relation: z.string().describe("Relation name (e.g., 'meeting' for meeting agenda items)"),
406
+ direction: z.enum(["outgoing", "incoming"]).optional().describe("Link direction: 'outgoing' (default) = links FROM this nest, 'incoming' = links TO this nest"),
407
+ limit: z.number().optional().describe("Max results per page (default 50)"),
408
+ page: z.number().optional().describe("Page number for pagination"),
409
+ }),
410
+ addGraphLink: z.object({
411
+ nestId: z.string().describe("Source nest ID"),
412
+ relation: z.string().describe("Relation name (e.g., 'meeting' to link a tension to a meeting as an agenda item)"),
413
+ targetId: z.string().describe("Target nest ID to link to"),
414
+ }),
415
+ removeGraphLink: z.object({
416
+ nestId: z.string().describe("Source nest ID"),
417
+ relation: z.string().describe("Relation name (e.g., 'meeting')"),
418
+ targetId: z.string().describe("Target nest ID to unlink"),
419
+ }),
379
420
  };
380
421
  // Tool annotations for MCP - hints for clients on tool behavior
381
422
  const readOnly = { annotations: { readOnlyHint: true, destructiveHint: false } };
@@ -505,8 +546,8 @@ export const toolDefinitions = [
505
546
  properties: {
506
547
  parentId: { type: "string", description: "Parent nest ID (workspace, circle, or project)" },
507
548
  title: { type: "string", description: "Title of the new nest (plain text, HTML tags stripped)" },
508
- purpose: { type: "string", description: "Purpose - why this nest exists (supports HTML: <b>, <i>, <code>, <ul>, <li>, <a>)" },
509
- description: { type: "string", description: "Detailed description (supports HTML: <b>, <i>, <code>, <ul>, <li>, <a>)" },
549
+ purpose: { type: "string", description: "Purpose the aspirational future state this nest works towards. Most important for workspaces/circles/roles where it defines the north star and context boundary. For other nests, prefer description or fields — but purpose can be set if meaningful. Supports HTML." },
550
+ description: { type: "string", description: "Detailed description primary field for nest information: project details, task context, acceptance criteria, DoD, etc. Use fields (e.g., project.status) for structured data and comments for progress updates. Supports HTML." },
510
551
  labels: {
511
552
  type: "array",
512
553
  items: { type: "string" },
@@ -544,8 +585,8 @@ export const toolDefinitions = [
544
585
  properties: {
545
586
  nestId: { type: "string", description: "Nest ID to update" },
546
587
  title: { type: "string", description: "New title (plain text, HTML tags stripped)" },
547
- purpose: { type: "string", description: "New purpose (supports HTML: <b>, <i>, <code>, <ul>, <li>, <a>)" },
548
- description: { type: "string", description: "New description (supports HTML: <b>, <i>, <code>, <ul>, <li>, <a>)" },
588
+ purpose: { type: "string", description: "New purpose aspirational future state. Most important for workspaces/circles/roles. For other nests, prefer description or fields — but purpose can be set if meaningful. Supports HTML." },
589
+ description: { type: "string", description: "New description primary field for nest information. Use for details, context, criteria. Use fields for structured data, comments for progress. Supports HTML." },
549
590
  parentId: { type: "string", description: "New parent ID (move nest to different location)" },
550
591
  labels: {
551
592
  type: "array",
@@ -1127,11 +1168,11 @@ export const toolDefinitions = [
1127
1168
  // Tension tools
1128
1169
  {
1129
1170
  name: "nestr_create_tension",
1130
- description: "Create a new tension — the fundamental unit of inter-role communication. Tensions represent a gap between current reality and potential. Use for ALL cross-role communication: requesting information, sharing information, requesting outcomes/projects, requesting actions/tasks, or setting expectations (governance). The parent nest must be a role, circle, or anchor-circle.",
1171
+ description: "Create a new tension — the fundamental unit of inter-role communication. Tensions represent a gap between current reality and potential. Use for ALL cross-role communication: requesting information, sharing information, requesting outcomes/projects, requesting actions/tasks, or setting expectations (governance). Placement matters: use a role ID as nestId when that role is sensing the tension, or a circle ID for cross-role, governance, or personally sensed tensions.",
1131
1172
  inputSchema: {
1132
1173
  type: "object",
1133
1174
  properties: {
1134
- nestId: { type: "string", description: "ID of the circle or role to create the tension on" },
1175
+ nestId: { type: "string", description: "ID of the role or circle to create the tension on. Place on a role to indicate that role is sensing the tension. Place on a circle for cross-role or governance tensions (use individual-action label if sensed personally without role authority)." },
1135
1176
  title: { type: "string", description: "The gap — what is the difference between current reality and desired state (plain text)" },
1136
1177
  description: { type: "string", description: "The observable facts — what you see/hear/experience (supports HTML)" },
1137
1178
  feeling: { type: "string", description: "The feeling this tension evokes — separated to keep the organizational response clean (plain text)" },
@@ -1216,11 +1257,13 @@ export const toolDefinitions = [
1216
1257
  name: "nestr_add_tension_part",
1217
1258
  description: `Add a governance change to a tension. Three modes based on input:
1218
1259
 
1219
- **New item** (no _id): Propose creating a new governance item. Provide title and labels (e.g., ["role"], ["circle"], ["policy"], ["accountability"], ["domain"]). For roles, include accountabilities and/or domains.
1260
+ **New item** (no _id): Propose creating a new governance item. Provide title and labels (e.g., ["role"], ["circle"], ["policy"], ["accountability"], ["domain"]). For roles, include accountabilities and/or domains as bulk shorthand.
1261
+
1262
+ **Change existing item** (_id provided): Propose changes to an existing governance item. Provide the _id of the item plus fields to change. Supports title/purpose changes, restructuring (parentId to move between circles), conversions (labels to convert role↔circle), user assignment changes (for elections), and accountability/domain changes. When updating a role with _id, if accountabilities/domains arrays are not provided, existing children are auto-copied into the proposal — use nestr_get_tension_part_children to list them and manage individually.
1220
1263
 
1221
- **Change existing item** (_id provided, no removeNest): Propose changes to an existing governance item. Provide the _id of the item plus fields to change. Supports title/purpose changes, restructuring (parentId to move between circles), conversions (labels to convert role↔circle), user assignment changes (for elections), and accountability/domain changes.
1264
+ **Remove existing item** (_id only, no other fields): Use nestr_remove_tension_part after adding the part, or use DELETE /parts to propose removal.
1222
1265
 
1223
- **Remove existing item** (_id + removeNest: true): Propose removal of an existing governance item.`,
1266
+ The accountabilities/domains arrays are bulk shorthand — they replace all children at once. For individual management (rename, add, remove single accountabilities/domains), use the tension part children tools instead.`,
1224
1267
  inputSchema: {
1225
1268
  type: "object",
1226
1269
  properties: {
@@ -1234,9 +1277,8 @@ export const toolDefinitions = [
1234
1277
  parentId: { type: "string", description: "Parent ID — use to move/restructure items (e.g., move role to different circle)" },
1235
1278
  users: { type: "array", items: { type: "string" }, description: "User IDs to assign (e.g., for elections: assign elected user to the role)" },
1236
1279
  due: { type: "string", description: "Due date / re-election date (ISO format)" },
1237
- accountabilities: { type: "array", items: { type: "string" }, description: "Accountability titles to set on a role (replaces existing)" },
1238
- domains: { type: "array", items: { type: "string" }, description: "Domain titles to set on a role (replaces existing)" },
1239
- removeNest: { type: "boolean", description: "Set to true with _id to propose removal of the existing governance item" },
1280
+ accountabilities: { type: "array", items: { type: "string" }, description: "Accountability titles to set on a role (replaces all — use children endpoint for individual management)" },
1281
+ domains: { type: "array", items: { type: "string" }, description: "Domain titles to set on a role (replaces all — use children endpoint for individual management)" },
1240
1282
  },
1241
1283
  required: ["nestId", "tensionId"],
1242
1284
  },
@@ -1244,7 +1286,7 @@ export const toolDefinitions = [
1244
1286
  },
1245
1287
  {
1246
1288
  name: "nestr_modify_tension_part",
1247
- description: "Modify an existing proposal part. Use to refine proposed values after initial creation — e.g., adjust a role's title or add accountabilities to a proposed role.",
1289
+ description: "Modify an existing proposal part. Use to refine proposed values after initial creation — e.g., adjust a role's title or purpose. For individual accountability/domain changes, prefer the children endpoint (nestr_get_tension_part_children, etc.).",
1248
1290
  inputSchema: {
1249
1291
  type: "object",
1250
1292
  properties: {
@@ -1258,9 +1300,8 @@ export const toolDefinitions = [
1258
1300
  parentId: { type: "string", description: "Updated parent ID" },
1259
1301
  users: { type: "array", items: { type: "string" }, description: "Updated user assignments" },
1260
1302
  due: { type: "string", description: "Updated due date (ISO format)" },
1261
- removeNest: { type: "boolean", description: "Change removal flag" },
1262
- accountabilities: { type: "array", items: { type: "string" }, description: "Updated accountabilities" },
1263
- domains: { type: "array", items: { type: "string" }, description: "Updated domains" },
1303
+ accountabilities: { type: "array", items: { type: "string" }, description: "Updated accountabilities (replaces all — use children endpoint for individual management)" },
1304
+ domains: { type: "array", items: { type: "string" }, description: "Updated domains (replaces all — use children endpoint for individual management)" },
1264
1305
  },
1265
1306
  required: ["nestId", "tensionId", "partId"],
1266
1307
  },
@@ -1268,7 +1309,7 @@ export const toolDefinitions = [
1268
1309
  },
1269
1310
  {
1270
1311
  name: "nestr_remove_tension_part",
1271
- description: "Remove a part from the proposal entirely. This does NOT propose deletion of a governance item it removes the proposal part itself. Use nestr_add_tension_part with removeNest:true to propose deleting a governance item.",
1312
+ description: "Remove a part from the proposal entirely, or propose deletion of a governance item. When used on a part that references an existing item (_id), this proposes removal of that governance item. When used on a part for a new item, it simply removes the proposal part.",
1272
1313
  inputSchema: {
1273
1314
  type: "object",
1274
1315
  properties: {
@@ -1280,6 +1321,63 @@ export const toolDefinitions = [
1280
1321
  },
1281
1322
  ...destructive,
1282
1323
  },
1324
+ {
1325
+ name: "nestr_get_tension_part_children",
1326
+ description: "List children (accountabilities/domains) of a proposal part. When a part proposes changes to an existing role (_id), existing accountabilities/domains are auto-copied into the proposal. Use this to see them and then manage individually with create/update/delete children tools.",
1327
+ inputSchema: {
1328
+ type: "object",
1329
+ properties: {
1330
+ nestId: { type: "string", description: "ID of the circle or role the tension belongs to" },
1331
+ tensionId: { type: "string", description: "Tension ID" },
1332
+ partId: { type: "string", description: "Part ID" },
1333
+ },
1334
+ required: ["nestId", "tensionId", "partId"],
1335
+ },
1336
+ },
1337
+ {
1338
+ name: "nestr_create_tension_part_child",
1339
+ description: "Add a new accountability or domain to a proposal part. When the proposal is enacted, this creates a new accountability/domain on the role.",
1340
+ inputSchema: {
1341
+ type: "object",
1342
+ properties: {
1343
+ nestId: { type: "string", description: "ID of the circle or role the tension belongs to" },
1344
+ tensionId: { type: "string", description: "Tension ID" },
1345
+ partId: { type: "string", description: "Part ID" },
1346
+ title: { type: "string", description: "Title for the new accountability or domain" },
1347
+ labels: { type: "array", items: { type: "string" }, description: "Labels defining the type: ['accountability'] or ['domain']" },
1348
+ },
1349
+ required: ["nestId", "tensionId", "partId", "title", "labels"],
1350
+ },
1351
+ },
1352
+ {
1353
+ name: "nestr_update_tension_part_child",
1354
+ description: "Rename an accountability or domain within a proposal part. When the proposal is enacted, the original accountability/domain is updated.",
1355
+ inputSchema: {
1356
+ type: "object",
1357
+ properties: {
1358
+ nestId: { type: "string", description: "ID of the circle or role the tension belongs to" },
1359
+ tensionId: { type: "string", description: "Tension ID" },
1360
+ partId: { type: "string", description: "Part ID" },
1361
+ childId: { type: "string", description: "Child ID to update" },
1362
+ title: { type: "string", description: "Updated title" },
1363
+ },
1364
+ required: ["nestId", "tensionId", "partId", "childId", "title"],
1365
+ },
1366
+ },
1367
+ {
1368
+ name: "nestr_delete_tension_part_child",
1369
+ description: "Soft-delete an accountability or domain from a proposal part. When the proposal is enacted, the original accountability/domain is removed from the role.",
1370
+ inputSchema: {
1371
+ type: "object",
1372
+ properties: {
1373
+ nestId: { type: "string", description: "ID of the circle or role the tension belongs to" },
1374
+ tensionId: { type: "string", description: "Tension ID" },
1375
+ partId: { type: "string", description: "Part ID" },
1376
+ childId: { type: "string", description: "Child ID to soft-delete" },
1377
+ },
1378
+ required: ["nestId", "tensionId", "partId", "childId"],
1379
+ },
1380
+ },
1283
1381
  {
1284
1382
  name: "nestr_get_tension_changes",
1285
1383
  description: "Get the namespaced diff for a proposal part. Returns { nestId, variable, newValue, oldValue } entries showing exactly what will change. Variables are namespaced: role.title, accountability.title, domain.title, policy.title, etc. For creates: oldValue is null. For deletes: newValue is null.",
@@ -1321,6 +1419,51 @@ export const toolDefinitions = [
1321
1419
  },
1322
1420
  ...mutating,
1323
1421
  },
1422
+ // Graph link tools
1423
+ {
1424
+ name: "nestr_get_graph_links",
1425
+ description: "Get nests linked via a named graph relation. Use relation 'meeting' on a meeting with direction 'incoming' to get its agenda items (linked tensions), or on a tension with direction 'outgoing' to see which meetings it's on. Supports pagination.",
1426
+ inputSchema: {
1427
+ type: "object",
1428
+ properties: {
1429
+ nestId: { type: "string", description: "Nest ID to get graph links for" },
1430
+ relation: { type: "string", description: "Relation name (e.g., 'meeting' for meeting agenda items)" },
1431
+ direction: { type: "string", enum: ["outgoing", "incoming"], description: "Link direction: 'outgoing' (default) = links FROM this nest, 'incoming' = links TO this nest" },
1432
+ limit: { type: "number", description: "Max results per page (default 50)" },
1433
+ page: { type: "number", description: "Page number for pagination" },
1434
+ },
1435
+ required: ["nestId", "relation"],
1436
+ },
1437
+ ...readOnly,
1438
+ },
1439
+ {
1440
+ name: "nestr_add_graph_link",
1441
+ description: "Create a bidirectional graph link between two nests. Primary use case: link a tension to a meeting as an agenda item using relation 'meeting' (nestId = tension, targetId = meeting). Links are bidirectional — queryable from either side.",
1442
+ inputSchema: {
1443
+ type: "object",
1444
+ properties: {
1445
+ nestId: { type: "string", description: "Source nest ID" },
1446
+ relation: { type: "string", description: "Relation name (e.g., 'meeting' to link a tension to a meeting)" },
1447
+ targetId: { type: "string", description: "Target nest ID to link to" },
1448
+ },
1449
+ required: ["nestId", "relation", "targetId"],
1450
+ },
1451
+ ...mutating,
1452
+ },
1453
+ {
1454
+ name: "nestr_remove_graph_link",
1455
+ description: "Remove a graph link between two nests. For example, remove a tension from a meeting's agenda by removing the 'meeting' relation.",
1456
+ inputSchema: {
1457
+ type: "object",
1458
+ properties: {
1459
+ nestId: { type: "string", description: "Source nest ID" },
1460
+ relation: { type: "string", description: "Relation name (e.g., 'meeting')" },
1461
+ targetId: { type: "string", description: "Target nest ID to unlink" },
1462
+ },
1463
+ required: ["nestId", "relation", "targetId"],
1464
+ },
1465
+ ...destructive,
1466
+ },
1324
1467
  ];
1325
1468
  // Strip description fields from nest objects in response data
1326
1469
  function stripDescriptionFields(data) {
@@ -1824,14 +1967,9 @@ async function _handleToolCall(client, name, args) {
1824
1967
  }
1825
1968
  case "nestr_add_tension_part": {
1826
1969
  const parsed = schemas.addTensionPart.parse(args);
1827
- const { nestId, tensionId, removeNest, ...body } = parsed;
1828
- if (body._id && removeNest) {
1829
- // Propose removal of existing item
1830
- const part = await client.proposeTensionRemoval(nestId, tensionId, { _id: body._id });
1831
- return formatResult({ message: "Removal proposal added successfully", part });
1832
- }
1833
- else if (body._id) {
1834
- // Propose change to existing item
1970
+ const { nestId, tensionId, ...body } = parsed;
1971
+ if (body._id) {
1972
+ // Propose change to existing item (existing children auto-copied if accountabilities/domains not provided)
1835
1973
  const part = await client.proposeTensionChange(nestId, tensionId, body);
1836
1974
  return formatResult({ message: "Change proposal added successfully", part });
1837
1975
  }
@@ -1852,6 +1990,26 @@ async function _handleToolCall(client, name, args) {
1852
1990
  await client.removeTensionPart(parsed.nestId, parsed.tensionId, parsed.partId);
1853
1991
  return formatResult({ message: `Tension part ${parsed.partId} removed successfully` });
1854
1992
  }
1993
+ case "nestr_get_tension_part_children": {
1994
+ const parsed = schemas.getTensionPartChildren.parse(args);
1995
+ const children = await client.getTensionPartChildren(parsed.nestId, parsed.tensionId, parsed.partId);
1996
+ return formatResult(children);
1997
+ }
1998
+ case "nestr_create_tension_part_child": {
1999
+ const parsed = schemas.createTensionPartChild.parse(args);
2000
+ const child = await client.createTensionPartChild(parsed.nestId, parsed.tensionId, parsed.partId, { title: parsed.title, labels: parsed.labels });
2001
+ return formatResult({ message: "Child created successfully", child });
2002
+ }
2003
+ case "nestr_update_tension_part_child": {
2004
+ const parsed = schemas.updateTensionPartChild.parse(args);
2005
+ const child = await client.updateTensionPartChild(parsed.nestId, parsed.tensionId, parsed.partId, parsed.childId, { title: parsed.title });
2006
+ return formatResult({ message: "Child updated successfully", child });
2007
+ }
2008
+ case "nestr_delete_tension_part_child": {
2009
+ const parsed = schemas.deleteTensionPartChild.parse(args);
2010
+ await client.deleteTensionPartChild(parsed.nestId, parsed.tensionId, parsed.partId, parsed.childId);
2011
+ return formatResult({ message: `Child ${parsed.childId} soft-deleted successfully` });
2012
+ }
1855
2013
  case "nestr_get_tension_changes": {
1856
2014
  const parsed = schemas.getTensionChanges.parse(args);
1857
2015
  const changes = await client.getTensionPartChanges(parsed.nestId, parsed.tensionId, parsed.partId);
@@ -1867,6 +2025,26 @@ async function _handleToolCall(client, name, args) {
1867
2025
  const status = await client.updateTensionStatus(parsed.nestId, parsed.tensionId, parsed.status);
1868
2026
  return formatResult({ message: `Tension status updated to '${parsed.status}'`, status });
1869
2027
  }
2028
+ // Graph link tools
2029
+ case "nestr_get_graph_links": {
2030
+ const parsed = schemas.getGraphLinks.parse(args);
2031
+ const result = await client.getGraphLinks(parsed.nestId, parsed.relation, {
2032
+ direction: parsed.direction,
2033
+ limit: parsed.limit,
2034
+ page: parsed.page,
2035
+ });
2036
+ return formatResult(compactResponse(result));
2037
+ }
2038
+ case "nestr_add_graph_link": {
2039
+ const parsed = schemas.addGraphLink.parse(args);
2040
+ const result = await client.addGraphLink(parsed.nestId, parsed.relation, parsed.targetId);
2041
+ return formatResult(result);
2042
+ }
2043
+ case "nestr_remove_graph_link": {
2044
+ const parsed = schemas.removeGraphLink.parse(args);
2045
+ const result = await client.removeGraphLink(parsed.nestId, parsed.relation, parsed.targetId);
2046
+ return formatResult({ message: "Graph link removed" });
2047
+ }
1870
2048
  default:
1871
2049
  return formatError({
1872
2050
  error: true,