@nestr/mcp 0.1.45 → 0.1.47

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/build/server.js CHANGED
@@ -9,6 +9,7 @@ import { toolDefinitions, handleToolCall } from "./tools/index.js";
9
9
  import { getCompletableListHtml, appResources } from "./apps/index.js";
10
10
  import { WORKSPACE_SETUP_INSTRUCTIONS } from "./skills/workspace-setup.js";
11
11
  import { TENSION_PROCESSING_INSTRUCTIONS } from "./skills/tension-processing.js";
12
+ import { DOING_WORK_INSTRUCTIONS } from "./skills/doing-work.js";
12
13
  import * as mcpcat from "mcpcat";
13
14
  // Server instructions provide context to AI assistants about what Nestr is and how to use it
14
15
  const SERVER_INSTRUCTIONS = `
@@ -255,17 +256,28 @@ When in doubt with \`custom\`, explain concepts in plain language rather than as
255
256
  - **Nest**: The universal building block - can be a task, project, role, circle, meeting, or any work item
256
257
  - **Circle**: A self-governing team with defined purpose, roles, and accountabilities (Holacracy/Sociocracy concept)
257
258
  - **Role**: A set of responsibilities (accountabilities) and decision rights (domains) that a person energizes
258
- - **Label**: Tags that define what type of nest something is (e.g., "project", "todo", "meeting", "anchor-circle")
259
+ - **Label**: Tags that define what type of nest something is (e.g., "project", "role", "meeting", "anchor-circle"). A nest without system labels is a todo/action — no "todo" label exists or is needed.
259
260
 
260
261
  ## Content Format
261
262
 
262
263
  Nestr uses different formats for different fields:
263
264
 
264
265
  - **\`title\`**: Plain text only. HTML tags are stripped. Keep titles concise.
265
- - **\`purpose\`, \`description\`**: HTML supported. Use basic tags: \`<b>\`, \`<i>\`, \`<code>\`, \`<ul>\`, \`<ol>\`, \`<li>\`, \`<a href="...">\`, \`<br>\`, \`<img src="...">\` (including base64 data URIs). **Markdown is NOT supported** it will display as literal text (e.g., \`**bold**\` renders as the string \`**bold**\`, not bold text).
266
- - **Comment \`body\`**: HTML supported (same as above, including base64 images). Use \`@username\` for mentions.
266
+ - **\`purpose\`**: The aspirational future state this nest is working towards. **Most important for workspaces, circles, and roles** it defines the north star and context boundary for the organization, circle, or role. Everything within that container should serve its purpose. For other nests (tasks, projects, etc.), prefer \`description\` or \`fields\` for detailed information but purpose can be set if it serves the user. Supports HTML.
267
+ - **\`description\`**: The primary field for detailed information about a nest. Use for project details, task context, acceptance criteria, Definition of Done, and any persistent information about the nest. Supports HTML.
268
+ - **\`fields\`**: Structured data defined by labels (e.g., \`fields['project.status']\`, \`fields['metric.frequency']\`). Use for structured, label-specific information.
269
+ - **Comment \`body\`**: HTML supported (same tags as above, including base64 images). Use \`@username\` for mentions. **Use comments for progress updates**, status changes, and conversation — not purpose or description.
267
270
  - **\`data\`**: Generic key-value store. Also used internally by Nestr and other integrations — **never overwrite or remove existing keys**. When adding your own data, namespace it under \`mcp.\` (e.g., \`{ "mcp.lastSync": "2025-01-01" }\`) to avoid conflicts. Not rendered in UI.
268
271
 
272
+ **Where to put information:**
273
+ | Information type | Field to use |
274
+ |-----------------|-------------|
275
+ | North star / aspirational future state | \`purpose\` (primarily workspaces, circles, roles) |
276
+ | Details, context, acceptance criteria, DoD | \`description\` |
277
+ | Structured data (status, frequency, etc.) | \`fields\` |
278
+ | Progress updates, status changes, discussion | Comments |
279
+ | Integration metadata, custom tracking | \`data\` (namespace under \`mcp.\`) |
280
+
269
281
  **Important — Always use HTML, not Markdown:** When composing purpose, description, or comment content, you must use HTML tags. This is a common mistake for AI agents that default to Markdown syntax.
270
282
 
271
283
  | Instead of (Markdown) | Use (HTML) |
@@ -309,45 +321,6 @@ Every nest has these **standard fields**:
309
321
 
310
322
  **Tip:** Use \`path\` to understand context without extra API calls. If you see \`"Acme Corp / Engineering / Developer / Fix bug"\`, you know the task is under the "Developer" role in the "Engineering" circle without fetching those nests.
311
323
 
312
- ### User Assignment
313
-
314
- **CRITICAL:** When creating tasks or projects under a role, you MUST explicitly set the \`users\` array. Placing a nest under a role does NOT automatically assign it to the person or agent energizing that role. Forgetting this is a common mistake that leaves work unassigned.
315
-
316
- **Key principle:** Work belongs to roles, not to people or agents. A person or agent has no authority to impact organizational work or structure — only roles can. When someone energizes a role, they are assigned to work *because* they fill that role, not in their own right. The role has the accountability; the person/agent is the vehicle through which the role acts.
317
-
318
- #### Assignment Rules for Work Under Roles
319
-
320
- Before creating work under a role, check who energizes it (the \`users\` array on the role):
321
-
322
- 1. **Role has one person/agent**: Assign to them
323
- \`\`\`json
324
- { "parentId": "roleId", "title": "Complete report", "users": ["userId"] }
325
- \`\`\`
326
-
327
- 2. **Role has multiple people/agents**:
328
- - If you energize the role → assign to yourself
329
- - If you don't energize the role:
330
- - **Assistant mode**: Ask the user which person energizing the role should carry this work
331
- - **Role-filler mode**: Create a tension on the circle requesting the accountable role take on this work
332
- - **Workspace mode**: Assign based on organizational rules or leave for the circle lead to decide
333
-
334
- 3. **Role is unfilled**: Leave \`users\` empty or omit — the work belongs to the role itself until someone energizes it
335
- \`\`\`json
336
- { "parentId": "roleId", "title": "Future task", "users": [] }
337
- \`\`\`
338
-
339
- #### Quick Reference
340
-
341
- | Scenario | Action |
342
- |----------|--------|
343
- | Role has one person/agent | \`users: [userId]\` |
344
- | Multiple people, you energize the role | \`users: [yourUserId]\` (assign to self) |
345
- | Multiple people, you don't energize it | Assistant: ask user. Role-filler: create tension. Workspace: use org rules. |
346
- | Role unfilled | \`users: []\` or omit |
347
- | Work not under a role | Assign to whoever should own it |
348
-
349
- **Note:** Accountabilities, domains, and policies never have users assigned - they belong to roles, not people.
350
-
351
324
  ### The \`fields\` Property
352
325
 
353
326
  The \`fields\` object holds custom data defined by labels. Fields are **namespaced by the label that defines them**:
@@ -369,13 +342,15 @@ The \`fields\` object holds custom data defined by labels. Fields are **namespac
369
342
  - \`Waiting\` - Blocked or on hold
370
343
  - \`Done\` - Completed
371
344
 
372
- **Circle strategy** (in \`fields['circle.strategy']\`):
345
+ **Circle strategy** (in \`fields['circle.strategy']\` for sub-circles, or \`fields['anchor-circle.strategy']\` for the anchor circle/workspace):
373
346
  A strategy that all roles within the circle must follow. Sub-circle strategies must align with and support the super-circle's strategy.
374
347
 
375
348
  **Important:** Label field schemas can be customized at the workspace or circle level. This means the available fields and their options may vary between different parts of the organization hierarchy. Always check what fields are actually present on a nest rather than assuming a fixed schema.
376
349
 
377
350
  ### Hierarchical Purpose
378
351
 
352
+ The \`purpose\` field is most important for **workspaces, circles, and roles** — it defines the aspirational future state that container is working towards. It is the north star and context boundary: everything within that container should serve its purpose.
353
+
379
354
  The \`purpose\` field follows a strict hierarchy:
380
355
  - The **anchor circle's purpose** is the purpose of the entire organization
381
356
  - Each **sub-circle's purpose** must contribute to its parent circle's purpose
@@ -383,44 +358,7 @@ The \`purpose\` field follows a strict hierarchy:
383
358
 
384
359
  This cascades through the entire hierarchy, which may be many layers deep. When creating or updating purposes, ensure they align with and serve the parent's purpose.
385
360
 
386
- ## Work Assignment & Context in Self-Organization
387
-
388
- In role-based self-organization, understanding where work lives is crucial:
389
-
390
- ### Work Should Live Under Roles
391
- The goal is to do all work from a role. Each task or project should be owned by a role that has the accountability for it.
392
-
393
- ### Circles as Roles
394
- From a super-circle's perspective, a sub-circle is just another role. Work directly under a circle (not under a role within it) is work the circle-as-a-whole does for its super-circle. How that work is internally organized is irrelevant to the super-circle.
395
-
396
- ### The \`individual-action\` Label
397
- Sometimes work needs to be done before a role exists for it. This work is captured directly in a circle with the \`individual-action\` label:
398
- - **Context**: The work is for this circle's purpose (not the super-circle)
399
- - **Meaning**: Work needed for the circle but not yet assigned to a role
400
- - **Next step**: When this work becomes structural, create a role for it
401
-
402
- ### Querying Work "In a Circle"
403
- When someone asks for "all work in circle X", be aware of context:
404
-
405
- **Include:**
406
- - Work under roles within the circle: \`in:circleId label:!individual-action depth:2 completed:false\`
407
- - Individual actions for the circle: \`in:circleId label:individual-action depth:1 completed:false\`
408
-
409
- **Handle separately:**
410
- - Work directly in circle WITHOUT \`individual-action\` label = work the circle does for its super-circle
411
- - You may include this but explicitly note: "This work lives at the super-circle level"
412
-
413
- **Example queries:**
414
- \`\`\`
415
- in:circleId label:individual-action depth:1 completed:false
416
- -> Individual actions directly in the circle (circle's own work without a role)
417
-
418
- in:circleId label:!individual-action depth:2 completed:false
419
- -> Work under direct roles in the circle (depth:2 = roles + their work)
420
-
421
- in:circleId completed:false
422
- -> ALL work in circle including sub-circles (may include super-circle context work)
423
- \`\`\`
361
+ **For other nests** (tasks, projects, etc.), prefer \`description\` for details, acceptance criteria, and Definition of Done. Use \`fields\` for structured data. Use comments for progress updates. Purpose can still be set on any nest if it serves the user, but by default reach for description first.
424
362
 
425
363
  ## Best Practices
426
364
 
@@ -429,12 +367,7 @@ in:circleId completed:false
429
367
  3. **Check labels** to understand what type of nest you're working with
430
368
  4. **Use @mentions** in comments to notify team members
431
369
  5. **Respect the hierarchy**: nests live under parents (workspace → circle → role/project → task)
432
- 6. **Check circle strategy and purpose** before creating work or governance:
433
- - Fetch the parent circle to review its \`purpose\` and \`fields['circle.strategy']\`
434
- - Ensure new projects and tasks align with and serve the circle's strategy
435
- - Use strategy and purpose to prioritize work and define clear outcomes
436
- - When proposing governance changes, consider how they support the circle's purpose
437
- 7. **Maintain skills on roles and circles** for AI knowledge persistence:
370
+ 6. **Maintain skills on roles and circles** for AI knowledge persistence:
438
371
  - Before doing work from a role, check for existing skills under that role or its circle — they contain processes, patterns, and domain knowledge from prior sessions
439
372
  - When completing work that is likely repeatable, capture it as a skill under the appropriate role or circle
440
373
  - Skills are the primary mechanism for AI context persistence — they're visible, searchable, and transfer with the role when it's reassigned
@@ -449,130 +382,33 @@ Skills are nests with the \`skill\` label that live directly under a role or cir
449
382
  - Skills make AI-persisted knowledge visible, searchable, and a first-class citizen in Nestr
450
383
  - They transfer with the role — when a role is reassigned, skills stay with the role, not the previous holder
451
384
 
385
+ ### Skill Types
386
+
387
+ Skills can be typed using \`fields['skill.type']\` to distinguish their nature:
388
+
389
+ - **\`process\`** — Step-by-step procedures: how to do something. Example: "How to deploy to production", "Customer onboarding checklist".
390
+ - **\`knowledge\`** — Domain knowledge, contacts, learned patterns. Example: "Key API endpoints", "Vendor contact list", "Common error patterns".
391
+ - **\`doctrine\`** — Organizational principles that guide decisions: the *why* behind how we work. Doctrine skills apply broadly and should be consulted before making decisions that affect the role or circle. Example: "Bias towards minimal output per tension", "Governance before operations".
392
+
393
+ When untyped, skills default to general-purpose knowledge. Use the type to help agents and humans find the right skill for the context — e.g., search for doctrine before proposing governance changes.
394
+
452
395
  ### When to Create Skills
453
396
  - After completing repeatable work — capture the process so it can be followed again
454
397
  - When learning domain-specific patterns — record them for future reference
455
398
  - When discovering key contacts, recurring processes, or domain knowledge relevant to a role
456
399
  - When decisions are made that should inform future work from this role
400
+ - When organizational principles emerge that should guide future decisions (doctrine)
457
401
 
458
402
  ### How to Use Skills
459
403
  - Before starting work from a role, search for skills under that role: \`in:roleId label:skill\`
460
404
  - Review relevant skills for context, processes, and prior decisions
405
+ - Check doctrine skills before proposing governance changes or making decisions
461
406
  - After completing work, create or update skills to reflect what was learned
462
407
  - Keep skills focused — one skill per process or knowledge area
463
408
 
464
409
  ### Nestr as Context and History
465
410
  All work in Nestr — projects, tasks, comments, tensions, and skills — forms the complete context and history for a role. Skills complement this by capturing the *how* and *why* alongside the *what*. Together, they ensure continuity whether the role is energized by a human, an AI agent, or transitions between them.
466
411
 
467
- ## Setting Up and Tracking Work
468
-
469
- Follow these practices to ensure work is properly captured, tracked, and documented in Nestr. In assistant mode, you help the user set up work. In role-filler mode, you set up your own work autonomously. In workspace mode, you manage work structurally.
470
-
471
- ### Setting Up Work
472
-
473
- 1. **Find the appropriate role** for the work:
474
- - Identify which role has the accountability for this type of work — the work belongs to the role, not to any individual
475
- - **Fetch the role** to check who energizes it (the \`users\` array on the role)
476
- - **If you energize the role**: Proceed with creating the project under that role, assigned to yourself
477
- - **If multiple people energize the role**: See "User Assignment" rules above for mode-specific behavior
478
- - **If you do NOT energize the role**:
479
- - **Assistant mode**: Inform the user which role is accountable and who energizes it. Ask if they still want to create the project there. If yes, add a comment notifying the person energizing the role: "@username - [User] is proposing this project for your role [RoleName]. Do you accept this work?"
480
- - **Role-filler mode**: Create a tension on the circle requesting the accountable role take on this work. Do not create projects under another role — only that role's holder can accept work into it.
481
- - **Workspace mode**: Create the project under the accountable role and assign to whoever energizes it based on organizational rules.
482
-
483
- 2. **Create a project** under the role:
484
- - Title in past tense describing what "done" looks like (e.g., "API integration completed", "User onboarding flow redesigned")
485
- - Set \`labels: ["project"]\` and \`fields: { "project.status": "Current" }\`
486
- - Use \`purpose\` to describe the Definition of Done (DoD) with clear acceptance criteria
487
- - **ALWAYS set \`users\` explicitly** - see "User Assignment" section above for rules:
488
- \`\`\`json
489
- { "parentId": "roleId", "title": "...", "labels": ["project"], "users": ["roleFillerUserId"] }
490
- \`\`\`
491
-
492
- 3. **If a project is already provided**, review and enhance it:
493
- - Check if the description has clear DoD criteria
494
- - If not, **append** to the description (don't overwrite) with suggested criteria
495
- - In assistant mode, suggest a clearer DoD to the user. In role-filler mode, define the DoD yourself.
496
-
497
- 4. **Break down into tasks** under the project:
498
- - Create individual tasks (nests without labels) for discrete pieces of work
499
- - Use \`description\` for additional context, acceptance criteria, or notes
500
- - Keep tasks small enough to complete in one sitting
501
-
502
- ### While Working
503
-
504
- 5. **Document progress as comments** (\`nestr_add_comment\`):
505
- - Post updates to individual tasks as you work on them
506
- - Post summaries or milestone updates to the project itself
507
- - In assistant mode, capture relevant questions you asked the user and their answers
508
- - Note: Comments on a task automatically appear on the parent project, so don't double-post
509
-
510
- 6. **Mark tasks complete** as you finish them:
511
- - Use \`nestr_update_nest\` with \`completed: true\`
512
- - Add a final comment summarizing what was done if helpful
513
-
514
- ### Example Flows
515
-
516
- **Assistant mode:**
517
- \`\`\`
518
- User: "Can you refactor our authentication module to use JWT?"
519
-
520
- 1. Search for relevant role (e.g., Developer role in Tech circle)
521
- 2. Create project: "Authentication module refactored to JWT"
522
- - Purpose: "Replace session-based auth with JWT tokens. DoD: All endpoints use JWT, tests pass, documentation updated."
523
- - Parent: Developer role
524
- - Assign to user
525
- 3. Create tasks, work through them, post findings as comments
526
- 4. Mark each task complete as finished
527
- \`\`\`
528
-
529
- **Role-filler mode:**
530
- \`\`\`
531
- Agent identifies a gap: session-based auth doesn't meet the security accountability.
532
-
533
- 1. Create project under own role: "Authentication module refactored to JWT"
534
- - Purpose: "Replace session-based auth with JWT tokens. DoD: All endpoints use JWT, tests pass."
535
- - Assign to self
536
- 2. Break down into tasks, execute autonomously
537
- 3. Document progress as comments for transparency
538
- 4. If the work impacts another role's domain (e.g., "Security stack"),
539
- create a tension requesting input from that role before proceeding
540
- \`\`\`
541
-
542
- ## Checking Role Authority
543
-
544
- Before creating work or proposing changes, verify which role has the accountability or domain for the work. Use these tools:
545
-
546
- ### Finding the Right Role
547
-
548
- 1. **\`nestr_get_circle_roles\`** — Returns all roles in a circle with their accountabilities and domains. This is the fastest way to see the full governance structure.
549
-
550
- 2. **\`nestr_search\`** with \`label:accountability\` or \`label:domain\` — Search across the workspace for specific accountabilities or domains by keyword.
551
-
552
- 3. **\`nestr_get_nest_children\`** on a specific role — Returns the role's accountabilities, domains, policies, and work items.
553
-
554
- ### Checking Before Acting
555
-
556
- When assigning work to a role, verify the role actually has accountability for it:
557
-
558
- \`\`\`
559
- 1. nestr_get_circle_roles(workspaceId, circleId)
560
- → Review accountabilities of each role
561
- 2. Find the role whose accountability matches the work
562
- 3. Create the project/task under that role
563
- \`\`\`
564
-
565
- When proposing governance changes, check for domain conflicts:
566
-
567
- \`\`\`
568
- 1. nestr_search(workspaceId, "label:domain [keyword]")
569
- → Check if another role already controls this area
570
- 2. If a domain exists, coordinate with the domain holder
571
- 3. Propose the change via nestr_create_tension on the circle
572
- \`\`\`
573
-
574
- **Tip:** Use \`nestr_search\` with \`in:circleId label:role\` to find all roles (including in sub-circles), or add \`depth:1\` to limit to direct roles only.
575
-
576
412
  ## Label Architecture
577
413
 
578
414
  Labels give nests meaning and define their behavior. There are three types of labels:
@@ -629,6 +465,42 @@ Use this when you need to know what values are valid for a field, especially bef
629
465
 
630
466
  **Example**: A workspace might customize the global \`project\` label to add a \`project.department\` field, and a sub-circle might further customize it to add \`project.sprint\` - both would appear on projects within that sub-circle.
631
467
 
468
+ #### Hints (Contextual Signals)
469
+
470
+ Add \`hints=true\` to \`nestr_get_nest\` or \`nestr_get_nest_children\` to get server-computed contextual signals about each nest. Hints surface actionable information without requiring extra API calls — e.g., unassigned roles, stale projects, or unread comments.
471
+
472
+ \`\`\`
473
+ GET /nests/{nestId}?hints=true
474
+ GET /nests/{nestId}/children?hints=true
475
+ \`\`\`
476
+
477
+ Each hint object has:
478
+ - \`type\` — machine-readable identifier (e.g., \`unassigned_role\`, \`stale_project\`, \`unread_comments\`)
479
+ - \`label\` — human/LLM-readable description of the hint
480
+ - \`severity\` — \`info\` (neutral context) | \`suggestion\` (improvement opportunity) | \`warning\` (needs attention) | \`alert\` (urgent)
481
+ - \`count\` — numeric value where applicable (otherwise absent)
482
+ - \`url\` — relative API URL to drill into the related resource (starts with \`/nests/\`)
483
+ - \`lastPost\` — (comments hints only) ISO timestamp of the most recent comment
484
+ - \`readAt\` — (comments hints only, user-scoped auth only) ISO timestamp of when the user last read comments. Compare \`lastPost > readAt\` to detect unread comments.
485
+
486
+ Example response with hints:
487
+ \`\`\`json
488
+ {
489
+ "_id": "roleId",
490
+ "title": "Developer",
491
+ "hints": [
492
+ {
493
+ "type": "unassigned_role",
494
+ "label": "This role has no users assigned to energize it...",
495
+ "severity": "warning",
496
+ "url": "/nests/roleId"
497
+ }
498
+ ]
499
+ }
500
+ \`\`\`
501
+
502
+ Use hints to proactively surface issues to the user — for example, when reviewing a circle's roles, hints can reveal which roles need attention without separate queries.
503
+
632
504
  ## Important Labels
633
505
 
634
506
  Labels define what type a nest is. The API strips the "circleplus-" prefix, so use labels without it.
@@ -646,8 +518,10 @@ Labels define what type a nest is. The API strips the "circleplus-" prefix, so u
646
518
  **Meetings & Operations:**
647
519
  - \`metric\` - A metric tracked by a role/circle
648
520
  - \`checklist\` - A recurring checklist item
649
- - \`governance\` - A governance meeting
650
- - \`tactical\` - A tactical/operational meeting
521
+ - \`governance\` - Combined with \`meeting\` label to create a governance meeting (processes governance tensions/proposals)
522
+ - \`circle-meeting\` - Combined with \`meeting\` label to create a circle/tactical meeting (processes operational tensions — projects, todos, inter-role requests)
523
+
524
+ **Creating meetings:** A meeting is a nest with \`labels: ["meeting", "governance"]\` or \`labels: ["meeting", "circle-meeting"]\`. Set \`due\` to the meeting start time. Assign all role fillers in the circle to the meeting's \`users\` array — this includes people/agents energizing roles in the circle, plus rep-link and circle-lead roles from sub-circles. Use graph tools (\`nestr_add_graph_link\` with relation \`meeting\`) to link tensions as agenda items. Agenda items that don't originate from a specific role can be created as child nests of the meeting directly.
651
525
 
652
526
  **OKRs & Goals:**
653
527
  - \`goal\` - An Objective (the O in OKR)
@@ -655,7 +529,7 @@ Labels define what type a nest is. The API strips the "circleplus-" prefix, so u
655
529
 
656
530
  **Work Tracking:**
657
531
  - \`project\` - An outcome requiring multiple steps to complete. Define in past tense as what "done" looks like (e.g., "Website redesign launched", "Q1 report published"). Has status: Future/Current/Waiting/Done.
658
- - *(no system label)* - A nest without system labels is a todo/action: a single, concrete action that can be done in one sitting (e.g., "Call supplier about pricing", "Draft intro paragraph"). The next physical step to move something forward. Note: todos CAN have other labels (personal or workspace labels for categorization) - what makes them todos is the absence of system labels.
532
+ - *(no system label)* - **Every nest is completable by default.** A nest without system labels is a todo/action a single, concrete step that can be done in one sitting (e.g., "Call supplier about pricing", "Draft intro paragraph"). To create a todo, simply create a nest without labels. There is NO "todo" label — do NOT add \`labels: ["todo"]\`. Labels change behavior (e.g., \`project\` adds status tracking), but the default nest is already a completable work item. Todos CAN have workspace or personal labels for categorization what makes them todos is the absence of *system* labels.
659
533
 
660
534
  **AI Knowledge:**
661
535
  - \`skill\` - A process, piece of knowledge, or learned pattern that a role or circle holds. Lives directly under a role or circle. Used by AI agents to persist and retrieve operational knowledge across sessions. When doing work that is likely to be repeated, capture it as a skill for future reference.
@@ -1340,6 +1214,7 @@ export function createServer(config = {}) {
1340
1214
  },
1341
1215
  instructions: [
1342
1216
  SERVER_INSTRUCTIONS,
1217
+ DOING_WORK_INSTRUCTIONS,
1343
1218
  TENSION_PROCESSING_INSTRUCTIONS,
1344
1219
  WORKSPACE_SETUP_INSTRUCTIONS,
1345
1220
  SERVER_INSTRUCTIONS_REFERENCE,
@@ -1502,33 +1377,40 @@ export function createServer(config = {}) {
1502
1377
  const response = await client.getCurrentUser();
1503
1378
  // The Nestr API wraps responses in { status, data } — unwrap if needed
1504
1379
  const user = response?.data || response;
1505
- cachedIdentity = {
1506
- userId: user._id,
1507
- userName: user.profile?.fullName || user._id,
1508
- };
1509
- return cachedIdentity;
1380
+ if (user?._id) {
1381
+ cachedIdentity = {
1382
+ userId: user._id,
1383
+ userName: user.profile?.fullName || user._id,
1384
+ };
1385
+ return cachedIdentity;
1386
+ }
1387
+ // getCurrentUser returned but without a valid _id — fall through to workspace fallback
1388
+ console.warn('[MCPCat] getCurrentUser returned no _id, trying workspace fallback');
1510
1389
  }
1511
1390
  catch (err) {
1512
1391
  // getCurrentUser failed — likely a workspace API key.
1513
- // Try to identify by workspace name instead.
1514
- try {
1515
- const workspaces = await client.listWorkspaces({ limit: 1 });
1516
- if (workspaces.length > 0) {
1517
- const ws = workspaces[0];
1518
- cachedIdentity = {
1519
- userId: ws._id,
1520
- userName: `${ws.title} (API key)`,
1521
- };
1522
- return cachedIdentity;
1523
- }
1524
- }
1525
- catch (wsErr) {
1526
- // Ignore — fall through to null
1392
+ console.log('[MCPCat] getCurrentUser failed, trying workspace fallback:', err instanceof Error ? err.message : err);
1393
+ }
1394
+ // Try to identify by workspace name instead.
1395
+ try {
1396
+ const result = await client.listWorkspaces({ limit: 1 });
1397
+ // Handle both array responses and wrapped { data: [...] } responses
1398
+ const workspaces = Array.isArray(result) ? result : result?.data || [];
1399
+ if (Array.isArray(workspaces) && workspaces.length > 0) {
1400
+ const ws = workspaces[0];
1401
+ cachedIdentity = {
1402
+ userId: ws._id,
1403
+ userName: `${ws.title} (API key)`,
1404
+ };
1405
+ return cachedIdentity;
1527
1406
  }
1528
- cachedIdentity = null;
1529
- console.error('[MCPCat] identify failed:', err instanceof Error ? err.message : err);
1530
- return null;
1407
+ console.warn('[MCPCat] listWorkspaces returned no results:', JSON.stringify(result).slice(0, 200));
1408
+ }
1409
+ catch (wsErr) {
1410
+ console.error('[MCPCat] listWorkspaces also failed:', wsErr instanceof Error ? wsErr.message : wsErr);
1531
1411
  }
1412
+ cachedIdentity = null;
1413
+ return null;
1532
1414
  },
1533
1415
  });
1534
1416
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Doing Work Skill
3
+ *
4
+ * Provides instructions for how work flows from purpose through strategy
5
+ * to execution, completion, and cross-role coordination.
6
+ * This will be extracted into a standalone MCP skill definition once the
7
+ * protocol supports it. For now, it's appended to server instructions.
8
+ */
9
+ export declare const DOING_WORK_INSTRUCTIONS: string;
10
+ //# sourceMappingURL=doing-work.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doing-work.d.ts","sourceRoot":"","sources":["../../src/skills/doing-work.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,eAAO,MAAM,uBAAuB,QAuP5B,CAAC"}