@datacore-one/mcp 1.3.0 → 1.4.1
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/dist/index.js +339 -114
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/packs/datacore-starter-v1/engrams.yaml +28 -0
- package/packs/dips-v1/engrams.yaml +4957 -747
- package/packs/fds-principles-v1/engrams.yaml +48 -0
- package/packs/mcp-design-guidelines/SKILL.md +20 -0
- package/packs/mcp-design-guidelines/engrams.yaml +380 -0
|
@@ -9,6 +9,12 @@ engrams:
|
|
|
9
9
|
tags: [ownership, data-sovereignty]
|
|
10
10
|
domain: ethics.data-sovereignty.ownership
|
|
11
11
|
activation: { retrieval_strength: 0.9, storage_strength: 0.9, frequency: 0, last_accessed: "2026-01-01" }
|
|
12
|
+
associations:
|
|
13
|
+
- { target_type: engram, target: ENG-2026-0101-012, type: semantic, strength: 0.7 }
|
|
14
|
+
- { target_type: engram, target: ENG-2026-0101-016, type: semantic, strength: 0.6 }
|
|
15
|
+
- { target_type: engram, target: ENG-2026-0101-014, type: semantic, strength: 0.5 }
|
|
16
|
+
dual_coding:
|
|
17
|
+
example: "User's health records stored in their personal vault, not on the hospital's server — hospital gets access tokens, not copies"
|
|
12
18
|
pack: fds-principles-v1
|
|
13
19
|
|
|
14
20
|
- id: ENG-2026-0101-011
|
|
@@ -21,6 +27,11 @@ engrams:
|
|
|
21
27
|
tags: [privacy, default, protection]
|
|
22
28
|
domain: ethics.data-sovereignty.privacy
|
|
23
29
|
activation: { retrieval_strength: 0.9, storage_strength: 0.9, frequency: 0, last_accessed: "2026-01-01" }
|
|
30
|
+
associations:
|
|
31
|
+
- { target_type: engram, target: ENG-2026-0101-013, type: semantic, strength: 0.7 }
|
|
32
|
+
- { target_type: engram, target: ENG-2026-0101-018, type: semantic, strength: 0.6 }
|
|
33
|
+
dual_coding:
|
|
34
|
+
analogy: "Like a house with walls — you don't build an open field and add walls as a premium feature"
|
|
24
35
|
pack: fds-principles-v1
|
|
25
36
|
|
|
26
37
|
- id: ENG-2026-0101-012
|
|
@@ -33,6 +44,9 @@ engrams:
|
|
|
33
44
|
tags: [control, access, permissions]
|
|
34
45
|
domain: ethics.data-sovereignty.control
|
|
35
46
|
activation: { retrieval_strength: 0.9, storage_strength: 0.9, frequency: 0, last_accessed: "2026-01-01" }
|
|
47
|
+
associations:
|
|
48
|
+
- { target_type: engram, target: ENG-2026-0101-010, type: semantic, strength: 0.7 }
|
|
49
|
+
- { target_type: engram, target: ENG-2026-0101-013, type: semantic, strength: 0.6 }
|
|
36
50
|
pack: fds-principles-v1
|
|
37
51
|
|
|
38
52
|
- id: ENG-2026-0101-013
|
|
@@ -45,6 +59,12 @@ engrams:
|
|
|
45
59
|
tags: [consent, explicit, collection]
|
|
46
60
|
domain: ethics.data-sovereignty.consent
|
|
47
61
|
activation: { retrieval_strength: 0.9, storage_strength: 0.9, frequency: 0, last_accessed: "2026-01-01" }
|
|
62
|
+
associations:
|
|
63
|
+
- { target_type: engram, target: ENG-2026-0101-011, type: semantic, strength: 0.7 }
|
|
64
|
+
- { target_type: engram, target: ENG-2026-0101-012, type: semantic, strength: 0.6 }
|
|
65
|
+
- { target_type: engram, target: ENG-2026-0101-015, type: semantic, strength: 0.5 }
|
|
66
|
+
dual_coding:
|
|
67
|
+
example: "'May we use your location to show nearby stores?' with a clear Yes/No — not buried in a 40-page ToS"
|
|
48
68
|
pack: fds-principles-v1
|
|
49
69
|
|
|
50
70
|
- id: ENG-2026-0101-014
|
|
@@ -57,6 +77,11 @@ engrams:
|
|
|
57
77
|
tags: [economic, benefit, value, compensation]
|
|
58
78
|
domain: ethics.data-sovereignty.economics
|
|
59
79
|
activation: { retrieval_strength: 0.9, storage_strength: 0.9, frequency: 0, last_accessed: "2026-01-01" }
|
|
80
|
+
associations:
|
|
81
|
+
- { target_type: engram, target: ENG-2026-0101-010, type: semantic, strength: 0.5 }
|
|
82
|
+
- { target_type: engram, target: ENG-2026-0101-015, type: semantic, strength: 0.6 }
|
|
83
|
+
dual_coding:
|
|
84
|
+
analogy: "Like a farmer selling produce at a market — the farmer sets the price, not the market stall operator"
|
|
60
85
|
pack: fds-principles-v1
|
|
61
86
|
|
|
62
87
|
- id: ENG-2026-0101-015
|
|
@@ -69,6 +94,10 @@ engrams:
|
|
|
69
94
|
tags: [transparency, practices, disclosure]
|
|
70
95
|
domain: ethics.data-sovereignty.transparency
|
|
71
96
|
activation: { retrieval_strength: 0.9, storage_strength: 0.9, frequency: 0, last_accessed: "2026-01-01" }
|
|
97
|
+
associations:
|
|
98
|
+
- { target_type: engram, target: ENG-2026-0101-013, type: semantic, strength: 0.5 }
|
|
99
|
+
- { target_type: engram, target: ENG-2026-0101-014, type: semantic, strength: 0.6 }
|
|
100
|
+
- { target_type: engram, target: ENG-2026-0101-017, type: semantic, strength: 0.5 }
|
|
72
101
|
pack: fds-principles-v1
|
|
73
102
|
|
|
74
103
|
- id: ENG-2026-0101-016
|
|
@@ -81,6 +110,11 @@ engrams:
|
|
|
81
110
|
tags: [portability, export, interoperability]
|
|
82
111
|
domain: ethics.data-sovereignty.portability
|
|
83
112
|
activation: { retrieval_strength: 0.9, storage_strength: 0.9, frequency: 0, last_accessed: "2026-01-01" }
|
|
113
|
+
associations:
|
|
114
|
+
- { target_type: engram, target: ENG-2026-0101-010, type: semantic, strength: 0.6 }
|
|
115
|
+
- { target_type: engram, target: ENG-2026-0101-019, type: semantic, strength: 0.7 }
|
|
116
|
+
dual_coding:
|
|
117
|
+
example: "One-click export of all your data as a ZIP of standard formats (JSON, CSV) — not a proprietary dump only readable by the same platform"
|
|
84
118
|
pack: fds-principles-v1
|
|
85
119
|
|
|
86
120
|
- id: ENG-2026-0101-017
|
|
@@ -93,6 +127,9 @@ engrams:
|
|
|
93
127
|
tags: [accountability, responsibility, breach]
|
|
94
128
|
domain: ethics.data-sovereignty.accountability
|
|
95
129
|
activation: { retrieval_strength: 0.9, storage_strength: 0.9, frequency: 0, last_accessed: "2026-01-01" }
|
|
130
|
+
associations:
|
|
131
|
+
- { target_type: engram, target: ENG-2026-0101-015, type: semantic, strength: 0.5 }
|
|
132
|
+
- { target_type: engram, target: ENG-2026-0101-018, type: semantic, strength: 0.6 }
|
|
96
133
|
pack: fds-principles-v1
|
|
97
134
|
|
|
98
135
|
- id: ENG-2026-0101-018
|
|
@@ -105,6 +142,12 @@ engrams:
|
|
|
105
142
|
tags: [ethics, design, architecture, embedded]
|
|
106
143
|
domain: ethics.data-sovereignty.ethics-by-design
|
|
107
144
|
activation: { retrieval_strength: 0.9, storage_strength: 0.9, frequency: 0, last_accessed: "2026-01-01" }
|
|
145
|
+
associations:
|
|
146
|
+
- { target_type: engram, target: ENG-2026-0101-011, type: semantic, strength: 0.6 }
|
|
147
|
+
- { target_type: engram, target: ENG-2026-0101-017, type: semantic, strength: 0.6 }
|
|
148
|
+
- { target_type: engram, target: ENG-2026-0101-019, type: semantic, strength: 0.5 }
|
|
149
|
+
dual_coding:
|
|
150
|
+
analogy: "Like building codes that require fire exits — you don't add them as an optional upgrade after the building is done"
|
|
108
151
|
pack: fds-principles-v1
|
|
109
152
|
|
|
110
153
|
- id: ENG-2026-0101-019
|
|
@@ -117,4 +160,9 @@ engrams:
|
|
|
117
160
|
tags: [interoperability, open-standards, protocols]
|
|
118
161
|
domain: ethics.data-sovereignty.interoperability
|
|
119
162
|
activation: { retrieval_strength: 0.9, storage_strength: 0.9, frequency: 0, last_accessed: "2026-01-01" }
|
|
163
|
+
associations:
|
|
164
|
+
- { target_type: engram, target: ENG-2026-0101-016, type: semantic, strength: 0.7 }
|
|
165
|
+
- { target_type: engram, target: ENG-2026-0101-018, type: semantic, strength: 0.5 }
|
|
166
|
+
dual_coding:
|
|
167
|
+
example: "Use W3C Verifiable Credentials and DID standards instead of inventing a proprietary identity format"
|
|
120
168
|
pack: fds-principles-v1
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: MCP Design Guidelines
|
|
3
|
+
description: Patterns for building agent-friendly MCP servers — instructions, hints, state machines, prompts, sessions, error design, modules
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
creator: Datacore
|
|
6
|
+
license: MIT
|
|
7
|
+
tags: [mcp, agent-ux, server-design, tools, resources, prompts]
|
|
8
|
+
x-datacore:
|
|
9
|
+
id: mcp-design-guidelines
|
|
10
|
+
injection_policy: on_match
|
|
11
|
+
match_terms: [mcp, server, tool, resource, prompt, agent-ux, session, hint, state-machine, module]
|
|
12
|
+
domain: software.mcp
|
|
13
|
+
engram_count: 18
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# MCP Design Guidelines
|
|
17
|
+
|
|
18
|
+
Patterns for building agent-friendly MCP servers. 18 engrams covering: server instructions, adaptive status, navigation hints, state machines, prompts, typo correction, context-aware resources, naming conventions, error design, session lifecycle, security modes, cross-server coordination, resource notifications, zero-config defaults, dynamic modules, machine-readable schemas, and subsystem isolation.
|
|
19
|
+
|
|
20
|
+
All patterns are generic and applicable to any MCP server project.
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
engrams:
|
|
2
|
+
- id: ENG-2026-0303-004
|
|
3
|
+
version: 2
|
|
4
|
+
status: active
|
|
5
|
+
type: architectural
|
|
6
|
+
scope: global
|
|
7
|
+
visibility: public
|
|
8
|
+
statement: >-
|
|
9
|
+
MCP servers must declare `instructions` in the Server constructor — compliant clients auto-inject this into the
|
|
10
|
+
system prompt. Keep under 500 words. Include: identity, architectural constraints, happy-path tool sequence,
|
|
11
|
+
common pitfalls. Omit exhaustive API docs (use prompts instead).
|
|
12
|
+
tags: [mcp, agent-ux, server-instructions]
|
|
13
|
+
domain: software.mcp.instructions
|
|
14
|
+
activation: { retrieval_strength: 0.7, storage_strength: 1, frequency: 0, last_accessed: "2026-03-03" }
|
|
15
|
+
associations:
|
|
16
|
+
- { target_type: engram, target: ENG-2026-0303-013, type: semantic, strength: 0.8 }
|
|
17
|
+
- { target_type: engram, target: ENG-2026-0303-014, type: semantic, strength: 0.7 }
|
|
18
|
+
- { target_type: engram, target: ENG-2026-0303-008, type: semantic, strength: 0.6 }
|
|
19
|
+
dual_coding:
|
|
20
|
+
example: "Server instructions: 'You have persistent memory through Datacore. Start every session with session.start, end with session.end.' — 50 words that shape every conversation"
|
|
21
|
+
pack: mcp-design-guidelines
|
|
22
|
+
|
|
23
|
+
- id: ENG-2026-0303-005
|
|
24
|
+
version: 2
|
|
25
|
+
status: active
|
|
26
|
+
type: architectural
|
|
27
|
+
scope: global
|
|
28
|
+
visibility: public
|
|
29
|
+
statement: >-
|
|
30
|
+
MCP status tools should be adaptive, not static dumps. Return `ready: boolean`, `_recommendations: string[]`
|
|
31
|
+
(ordered fix list), and `_next: string` (exact next tool to call). When ready=true, recommendations is empty and
|
|
32
|
+
_next points to the primary workflow tool. This eliminates agent interpretation overhead.
|
|
33
|
+
tags: [mcp, agent-ux, adaptive-status]
|
|
34
|
+
domain: software.mcp.status
|
|
35
|
+
activation: { retrieval_strength: 0.7, storage_strength: 1, frequency: 0, last_accessed: "2026-03-03" }
|
|
36
|
+
associations:
|
|
37
|
+
- { target_type: engram, target: ENG-2026-0303-006, type: semantic, strength: 0.7 }
|
|
38
|
+
- { target_type: engram, target: ENG-2026-0303-013, type: semantic, strength: 0.7 }
|
|
39
|
+
- { target_type: engram, target: ENG-2026-0303-014, type: semantic, strength: 0.5 }
|
|
40
|
+
dual_coding:
|
|
41
|
+
analogy: "Like a GPS that says 'you have arrived' vs one that always lists all possible directions — adaptive status tells the agent exactly what matters right now"
|
|
42
|
+
pack: mcp-design-guidelines
|
|
43
|
+
|
|
44
|
+
- id: ENG-2026-0303-006
|
|
45
|
+
version: 2
|
|
46
|
+
status: active
|
|
47
|
+
type: architectural
|
|
48
|
+
scope: global
|
|
49
|
+
visibility: public
|
|
50
|
+
statement: >-
|
|
51
|
+
Every MCP tool response should include `_next: string` (most logical next step) and `_related: string[]` (2-4
|
|
52
|
+
related tool names). These create an implicit navigation graph. Hints are contextual — same tool returns different
|
|
53
|
+
_next based on outcome (e.g., upload success -> verify, upload fail -> diagnose).
|
|
54
|
+
tags: [mcp, agent-ux, navigation-hints]
|
|
55
|
+
domain: software.mcp.hints
|
|
56
|
+
activation: { retrieval_strength: 0.7, storage_strength: 1, frequency: 0, last_accessed: "2026-03-03" }
|
|
57
|
+
associations:
|
|
58
|
+
- { target_type: engram, target: ENG-2026-0303-005, type: semantic, strength: 0.7 }
|
|
59
|
+
- { target_type: engram, target: ENG-2026-0303-007, type: semantic, strength: 0.7 }
|
|
60
|
+
- { target_type: engram, target: ENG-2026-0303-013, type: semantic, strength: 0.6 }
|
|
61
|
+
- { target_type: engram, target: ENG-2026-0303-023, type: semantic, strength: 0.5 }
|
|
62
|
+
dual_coding:
|
|
63
|
+
example: "upload_file returns {_next: 'verify_upload', _related: ['list_files', 'delete_file']} on success, but {_next: 'diagnose_error', _related: ['retry_upload']} on failure"
|
|
64
|
+
pack: mcp-design-guidelines
|
|
65
|
+
|
|
66
|
+
- id: ENG-2026-0303-007
|
|
67
|
+
version: 2
|
|
68
|
+
status: active
|
|
69
|
+
type: architectural
|
|
70
|
+
scope: global
|
|
71
|
+
visibility: public
|
|
72
|
+
statement: >-
|
|
73
|
+
For complex MCP workflows with 4+ states, create a dedicated state machine tool that accepts a workflow ID and
|
|
74
|
+
returns the exact next action based on current state. Returns: state, next_tool, next_args, notes. Use this
|
|
75
|
+
instead of _next hints when there are role-dependent actions, expiry conditions, or non-linear transitions.
|
|
76
|
+
tags: [mcp, agent-ux, state-machine]
|
|
77
|
+
domain: software.mcp.state-machine
|
|
78
|
+
activation: { retrieval_strength: 0.7, storage_strength: 1, frequency: 0, last_accessed: "2026-03-03" }
|
|
79
|
+
associations:
|
|
80
|
+
- { target_type: engram, target: ENG-2026-0303-006, type: semantic, strength: 0.7 }
|
|
81
|
+
- { target_type: engram, target: ENG-2026-0303-008, type: semantic, strength: 0.6 }
|
|
82
|
+
- { target_type: engram, target: ENG-2026-0303-013, type: semantic, strength: 0.5 }
|
|
83
|
+
dual_coding:
|
|
84
|
+
analogy: "Like a traffic light controller — it doesn't just say 'green next', it knows the full state: pedestrian button pressed, time since last change, emergency vehicle approaching. The state machine manages complexity the hints can't"
|
|
85
|
+
pack: mcp-design-guidelines
|
|
86
|
+
|
|
87
|
+
- id: ENG-2026-0303-008
|
|
88
|
+
version: 2
|
|
89
|
+
status: active
|
|
90
|
+
type: architectural
|
|
91
|
+
scope: global
|
|
92
|
+
visibility: public
|
|
93
|
+
statement: >-
|
|
94
|
+
Use MCP Prompts for multi-step workflows involving 3+ tools in sequence. Prompts are named, parameterized
|
|
95
|
+
conversation starters — they script the workflow so agents don't have to infer it from tool descriptions. Server
|
|
96
|
+
instructions frame the interaction (always active); prompts script specific workflows (on-demand).
|
|
97
|
+
tags: [mcp, agent-ux, prompts]
|
|
98
|
+
domain: software.mcp.prompts
|
|
99
|
+
activation: { retrieval_strength: 0.7, storage_strength: 1, frequency: 0, last_accessed: "2026-03-03" }
|
|
100
|
+
associations:
|
|
101
|
+
- { target_type: engram, target: ENG-2026-0303-004, type: semantic, strength: 0.6 }
|
|
102
|
+
- { target_type: engram, target: ENG-2026-0303-007, type: semantic, strength: 0.6 }
|
|
103
|
+
- { target_type: engram, target: ENG-2026-0303-013, type: semantic, strength: 0.7 }
|
|
104
|
+
dual_coding:
|
|
105
|
+
analogy: "Instructions are kitchen rules (always wash hands, never leave stove unattended). Prompts are recipes (step 1: preheat oven, step 2: mix ingredients). Rules frame every session; recipes guide specific tasks"
|
|
106
|
+
pack: mcp-design-guidelines
|
|
107
|
+
|
|
108
|
+
- id: ENG-2026-0303-009
|
|
109
|
+
version: 2
|
|
110
|
+
status: active
|
|
111
|
+
type: procedural
|
|
112
|
+
scope: global
|
|
113
|
+
visibility: public
|
|
114
|
+
statement: >-
|
|
115
|
+
When an agent calls an unknown MCP tool, suggest corrections using Levenshtein distance (threshold: max(4,
|
|
116
|
+
floor(name.length * 0.4)), return up to 3 suggestions). Agents hallucinate tool names, especially with longer
|
|
117
|
+
prefixes. A good suggestion saves a full round-trip. Fall back to listing first 5 tools if nothing is close.
|
|
118
|
+
tags: [mcp, agent-ux, error-handling, typo-correction]
|
|
119
|
+
domain: software.mcp.error-handling
|
|
120
|
+
activation: { retrieval_strength: 0.7, storage_strength: 1, frequency: 0, last_accessed: "2026-03-03" }
|
|
121
|
+
associations:
|
|
122
|
+
- { target_type: engram, target: ENG-2026-0303-023, type: semantic, strength: 0.7 }
|
|
123
|
+
- { target_type: engram, target: ENG-2026-0303-022, type: semantic, strength: 0.5 }
|
|
124
|
+
dual_coding:
|
|
125
|
+
example: "Agent calls 'datacore.sesion.start' (typo). Server responds: 'Unknown tool: datacore.sesion.start. Did you mean: datacore.session.start, datacore.session.end?' — saves one full round-trip"
|
|
126
|
+
pack: mcp-design-guidelines
|
|
127
|
+
|
|
128
|
+
- id: ENG-2026-0303-010
|
|
129
|
+
version: 2
|
|
130
|
+
status: active
|
|
131
|
+
type: architectural
|
|
132
|
+
scope: global
|
|
133
|
+
visibility: public
|
|
134
|
+
statement: >-
|
|
135
|
+
MCP resources should be context-aware, not static. Read system state (connection, stamps, config) and adjust
|
|
136
|
+
content. A guide that says "you're ready, start uploading" beats one that always lists setup steps. Resources are
|
|
137
|
+
read-only and cacheable — use for reference, not actions.
|
|
138
|
+
tags: [mcp, agent-ux, resources]
|
|
139
|
+
domain: software.mcp.resources
|
|
140
|
+
activation: { retrieval_strength: 0.7, storage_strength: 1, frequency: 0, last_accessed: "2026-03-03" }
|
|
141
|
+
associations:
|
|
142
|
+
- { target_type: engram, target: ENG-2026-0303-025, type: semantic, strength: 0.7 }
|
|
143
|
+
- { target_type: engram, target: ENG-2026-0303-005, type: semantic, strength: 0.6 }
|
|
144
|
+
- { target_type: engram, target: ENG-2026-0303-013, type: semantic, strength: 0.5 }
|
|
145
|
+
dual_coding:
|
|
146
|
+
analogy: "Like a museum guide who skips rooms you've already visited — context-aware resources adapt to what the agent already knows, not just dump the entire manual every time"
|
|
147
|
+
pack: mcp-design-guidelines
|
|
148
|
+
|
|
149
|
+
- id: ENG-2026-0303-013
|
|
150
|
+
version: 2
|
|
151
|
+
status: active
|
|
152
|
+
type: architectural
|
|
153
|
+
scope: global
|
|
154
|
+
visibility: public
|
|
155
|
+
statement: >-
|
|
156
|
+
The core MCP agent-UX philosophy: layer your guidance at five scales. (1) Server instructions frame the
|
|
157
|
+
interaction, (2) adaptive status orients, (3) _next/_related hints navigate between tools, (4) prompts script
|
|
158
|
+
multi-step workflows, (5) state machine tools coordinate complex flows. Each layer handles a different granularity
|
|
159
|
+
of agent guidance.
|
|
160
|
+
tags: [mcp, agent-ux, design-philosophy]
|
|
161
|
+
domain: software.mcp.philosophy
|
|
162
|
+
activation: { retrieval_strength: 0.7, storage_strength: 1, frequency: 0, last_accessed: "2026-03-03" }
|
|
163
|
+
associations:
|
|
164
|
+
- { target_type: engram, target: ENG-2026-0303-004, type: semantic, strength: 0.8 }
|
|
165
|
+
- { target_type: engram, target: ENG-2026-0303-005, type: semantic, strength: 0.7 }
|
|
166
|
+
- { target_type: engram, target: ENG-2026-0303-006, type: semantic, strength: 0.7 }
|
|
167
|
+
- { target_type: engram, target: ENG-2026-0303-007, type: semantic, strength: 0.6 }
|
|
168
|
+
- { target_type: engram, target: ENG-2026-0303-008, type: semantic, strength: 0.7 }
|
|
169
|
+
dual_coding:
|
|
170
|
+
analogy: "Like an orchestra — the conductor (instructions) sets the tempo, section leaders (status) orient their groups, sheet music markings (hints) guide note-to-note, full scores (prompts) script complex passages, and the conductor's baton signals (state machine) coordinate the finale"
|
|
171
|
+
pack: mcp-design-guidelines
|
|
172
|
+
|
|
173
|
+
- id: ENG-2026-0303-014
|
|
174
|
+
version: 2
|
|
175
|
+
status: active
|
|
176
|
+
type: architectural
|
|
177
|
+
scope: global
|
|
178
|
+
visibility: public
|
|
179
|
+
statement: >-
|
|
180
|
+
MCP servers that maintain state should define a session lifecycle: start (inject context, orient the agent), work
|
|
181
|
+
(track accessed items), feedback (rate injected context), end (flush state, capture learnings). This enables
|
|
182
|
+
feedback loops and progressive improvement. The agent bookends conversations with start/end because server
|
|
183
|
+
instructions tell it to.
|
|
184
|
+
tags: [mcp, agent-ux, session-lifecycle]
|
|
185
|
+
domain: software.mcp.session
|
|
186
|
+
activation: { retrieval_strength: 0.7, storage_strength: 1, frequency: 0, last_accessed: "2026-03-03" }
|
|
187
|
+
associations:
|
|
188
|
+
- { target_type: engram, target: ENG-2026-0303-004, type: semantic, strength: 0.7 }
|
|
189
|
+
- { target_type: engram, target: ENG-2026-0303-005, type: semantic, strength: 0.5 }
|
|
190
|
+
- { target_type: engram, target: ENG-2026-0303-013, type: semantic, strength: 0.6 }
|
|
191
|
+
dual_coding:
|
|
192
|
+
analogy: "Like a doctor's visit — check-in (start), examination (work), patient feedback (feedback), discharge summary (end). Each visit builds on the last because the chart persists"
|
|
193
|
+
pack: mcp-design-guidelines
|
|
194
|
+
|
|
195
|
+
- id: ENG-2026-0303-015
|
|
196
|
+
version: 2
|
|
197
|
+
status: active
|
|
198
|
+
type: architectural
|
|
199
|
+
scope: global
|
|
200
|
+
visibility: public
|
|
201
|
+
statement: >-
|
|
202
|
+
Gate sensitive MCP tools by deployment mode. Stdio transport defaults to LOCAL_MODE=true (all tools including
|
|
203
|
+
signing/keys). HTTP transport defaults to LOCAL_MODE=false (only read-only/verification tools). Never log key
|
|
204
|
+
material even in local mode. This protects users who expose MCP servers over HTTP from leaking sensitive
|
|
205
|
+
operations.
|
|
206
|
+
tags: [mcp, agent-ux, security, local-remote]
|
|
207
|
+
domain: software.mcp.security
|
|
208
|
+
activation: { retrieval_strength: 0.7, storage_strength: 1, frequency: 0, last_accessed: "2026-03-03" }
|
|
209
|
+
associations:
|
|
210
|
+
- { target_type: engram, target: ENG-2026-0303-022, type: semantic, strength: 0.5 }
|
|
211
|
+
- { target_type: engram, target: ENG-2026-0303-026, type: semantic, strength: 0.5 }
|
|
212
|
+
dual_coding:
|
|
213
|
+
example: "Stdio (local): agent can call sign_document, generate_key, export_wallet. HTTP (remote): same agent can only call verify_signature, check_balance. Transport type determines the security boundary"
|
|
214
|
+
pack: mcp-design-guidelines
|
|
215
|
+
|
|
216
|
+
- id: ENG-2026-0303-018
|
|
217
|
+
version: 2
|
|
218
|
+
status: active
|
|
219
|
+
type: procedural
|
|
220
|
+
scope: global
|
|
221
|
+
visibility: public
|
|
222
|
+
statement: >-
|
|
223
|
+
MCP servers must work with zero configuration. Every config field needs a sensible default. Missing config file =
|
|
224
|
+
all defaults. Invalid YAML = log warning + use defaults. Never crash on configuration. Critical for npx-installed
|
|
225
|
+
servers where users expect immediate functionality.
|
|
226
|
+
tags: [mcp, agent-ux, configuration, zero-config]
|
|
227
|
+
domain: software.mcp.configuration
|
|
228
|
+
activation: { retrieval_strength: 0.7, storage_strength: 1, frequency: 0, last_accessed: "2026-03-03" }
|
|
229
|
+
associations:
|
|
230
|
+
- { target_type: engram, target: ENG-2026-0303-022, type: semantic, strength: 0.5 }
|
|
231
|
+
- { target_type: engram, target: ENG-2026-0303-027, type: semantic, strength: 0.6 }
|
|
232
|
+
dual_coding:
|
|
233
|
+
analogy: "Like a microwave — plug it in, press Start, it heats for 30 seconds. No manual required. Power users can set temperature, time, mode. But the default just works"
|
|
234
|
+
pack: mcp-design-guidelines
|
|
235
|
+
|
|
236
|
+
- id: ENG-2026-0303-020
|
|
237
|
+
version: 2
|
|
238
|
+
status: active
|
|
239
|
+
type: architectural
|
|
240
|
+
scope: global
|
|
241
|
+
visibility: public
|
|
242
|
+
statement: >-
|
|
243
|
+
CLI tools for agent consumption should provide a machine-readable schema command returning JSON with command
|
|
244
|
+
names, params, auth levels (none/sign/chain), constraints (rate limits, spending caps), and retryable flags.
|
|
245
|
+
Agents discover capabilities from schema, not by parsing help text. Auth level annotation lets agents check
|
|
246
|
+
prerequisites before attempting calls.
|
|
247
|
+
tags: [mcp, agent-ux, cli, schema]
|
|
248
|
+
domain: software.mcp.cli
|
|
249
|
+
activation: { retrieval_strength: 0.7, storage_strength: 1, frequency: 0, last_accessed: "2026-03-03" }
|
|
250
|
+
associations:
|
|
251
|
+
- { target_type: engram, target: ENG-2026-0303-022, type: semantic, strength: 0.6 }
|
|
252
|
+
- { target_type: engram, target: ENG-2026-0303-015, type: semantic, strength: 0.5 }
|
|
253
|
+
dual_coding:
|
|
254
|
+
example: "ade --schema returns {commands: [{name: 'upload', params: [{name: 'file', required: true}], auth: 'sign', retryable: true, rate_limit: '10/min'}]} — agents parse this, not 'ade --help' text"
|
|
255
|
+
pack: mcp-design-guidelines
|
|
256
|
+
|
|
257
|
+
- id: ENG-2026-0303-022
|
|
258
|
+
version: 2
|
|
259
|
+
status: active
|
|
260
|
+
type: procedural
|
|
261
|
+
scope: global
|
|
262
|
+
visibility: public
|
|
263
|
+
statement: >-
|
|
264
|
+
Prefix all MCP tool names with the server name (e.g., myserver_upload not upload). In multi-server environments,
|
|
265
|
+
unprefixed names collide. Declare all three capabilities (tools, resources, prompts) even if empty — omitting
|
|
266
|
+
prompts:{} means clients won't ask for your prompts.
|
|
267
|
+
tags: [mcp, agent-ux, naming, capabilities]
|
|
268
|
+
domain: software.mcp.naming
|
|
269
|
+
activation: { retrieval_strength: 0.7, storage_strength: 1, frequency: 0, last_accessed: "2026-03-03" }
|
|
270
|
+
associations:
|
|
271
|
+
- { target_type: engram, target: ENG-2026-0303-009, type: semantic, strength: 0.5 }
|
|
272
|
+
- { target_type: engram, target: ENG-2026-0303-020, type: semantic, strength: 0.6 }
|
|
273
|
+
- { target_type: engram, target: ENG-2026-0303-026, type: semantic, strength: 0.5 }
|
|
274
|
+
dual_coding:
|
|
275
|
+
example: "Bad: tools named 'upload', 'search', 'delete'. Good: 'datacore.upload', 'datacore.search', 'datacore.delete'. With 5 MCP servers loaded, 'search' is ambiguous — 'datacore.search' is not"
|
|
276
|
+
pack: mcp-design-guidelines
|
|
277
|
+
|
|
278
|
+
- id: ENG-2026-0303-023
|
|
279
|
+
version: 2
|
|
280
|
+
status: active
|
|
281
|
+
type: procedural
|
|
282
|
+
scope: global
|
|
283
|
+
visibility: public
|
|
284
|
+
statement: >-
|
|
285
|
+
MCP error responses should guide recovery: include the failed value ("Resource 0xabc not found" not "not found"),
|
|
286
|
+
suggest the fix ("Call setup_tool first"), distinguish user errors from system errors, and include _next pointing
|
|
287
|
+
to the diagnostic/recovery tool. Mark transient failures (rate limits, timeouts) as retryable with
|
|
288
|
+
suggestedCommand for automatic agent recovery.
|
|
289
|
+
tags: [mcp, agent-ux, error-handling]
|
|
290
|
+
domain: software.mcp.error-handling
|
|
291
|
+
activation: { retrieval_strength: 0.7, storage_strength: 1, frequency: 0, last_accessed: "2026-03-03" }
|
|
292
|
+
associations:
|
|
293
|
+
- { target_type: engram, target: ENG-2026-0303-009, type: semantic, strength: 0.7 }
|
|
294
|
+
- { target_type: engram, target: ENG-2026-0303-006, type: semantic, strength: 0.5 }
|
|
295
|
+
- { target_type: engram, target: ENG-2026-0303-027, type: semantic, strength: 0.6 }
|
|
296
|
+
dual_coding:
|
|
297
|
+
example: "Bad: 'Error: not found'. Good: 'Error: Resource 0xabc not found. This resource may not be registered yet. Call datacore.register with id=0xabc first. _next: datacore.register'"
|
|
298
|
+
pack: mcp-design-guidelines
|
|
299
|
+
|
|
300
|
+
- id: ENG-2026-0303-024
|
|
301
|
+
version: 2
|
|
302
|
+
status: active
|
|
303
|
+
type: architectural
|
|
304
|
+
scope: global
|
|
305
|
+
visibility: public
|
|
306
|
+
statement: >-
|
|
307
|
+
For cross-MCP-server workflows, the agent is the coordinator — servers never call each other directly. Each server
|
|
308
|
+
documents companion servers in its status tool (what they do, how to install, what they're needed for). Include
|
|
309
|
+
cross-server tool names in _next hints so agents can navigate across server boundaries.
|
|
310
|
+
tags: [mcp, agent-ux, cross-server, coordination]
|
|
311
|
+
domain: software.mcp.cross-server
|
|
312
|
+
activation: { retrieval_strength: 0.7, storage_strength: 1, frequency: 0, last_accessed: "2026-03-03" }
|
|
313
|
+
associations:
|
|
314
|
+
- { target_type: engram, target: ENG-2026-0303-006, type: semantic, strength: 0.6 }
|
|
315
|
+
- { target_type: engram, target: ENG-2026-0303-005, type: semantic, strength: 0.5 }
|
|
316
|
+
dual_coding:
|
|
317
|
+
analogy: "Like international diplomacy — countries (servers) don't invade each other, they negotiate through ambassadors (the agent). Each country publishes a directory of its counterparts so the ambassador knows who to call"
|
|
318
|
+
pack: mcp-design-guidelines
|
|
319
|
+
|
|
320
|
+
- id: ENG-2026-0303-025
|
|
321
|
+
version: 2
|
|
322
|
+
status: active
|
|
323
|
+
type: procedural
|
|
324
|
+
scope: global
|
|
325
|
+
visibility: public
|
|
326
|
+
statement: >-
|
|
327
|
+
When MCP tools mutate state that resources expose, broadcast resource update notifications so subscribed clients
|
|
328
|
+
can refresh. Maintain a set of mutating tool names and notify after execution. This enables live UIs (dashboards,
|
|
329
|
+
sidebars) to stay current without polling.
|
|
330
|
+
tags: [mcp, agent-ux, resource-notifications]
|
|
331
|
+
domain: software.mcp.notifications
|
|
332
|
+
activation: { retrieval_strength: 0.7, storage_strength: 1, frequency: 0, last_accessed: "2026-03-03" }
|
|
333
|
+
associations:
|
|
334
|
+
- { target_type: engram, target: ENG-2026-0303-010, type: semantic, strength: 0.7 }
|
|
335
|
+
- { target_type: engram, target: ENG-2026-0303-026, type: semantic, strength: 0.5 }
|
|
336
|
+
dual_coding:
|
|
337
|
+
example: "ENGRAM_MUTATING_TOOLS = ['learn', 'forget', 'feedback']. After any of these run, call server.notifyResourceChanged('engrams://active'). Subscribed UIs refresh their engram list automatically"
|
|
338
|
+
pack: mcp-design-guidelines
|
|
339
|
+
|
|
340
|
+
- id: ENG-2026-0303-026
|
|
341
|
+
version: 2
|
|
342
|
+
status: active
|
|
343
|
+
type: architectural
|
|
344
|
+
scope: global
|
|
345
|
+
visibility: public
|
|
346
|
+
statement: >-
|
|
347
|
+
For extensible MCP servers, support dynamic tool loading from modules. Dual-gate: tool must be declared in
|
|
348
|
+
manifest AND have exported handler. Give module tools scoped context (own data dir, config, logger) so they can't
|
|
349
|
+
interfere with core state. Namespace module tools under the server prefix (e.g., server.module.tool_name).
|
|
350
|
+
tags: [mcp, agent-ux, modules, extensibility]
|
|
351
|
+
domain: software.mcp.modules
|
|
352
|
+
activation: { retrieval_strength: 0.7, storage_strength: 1, frequency: 0, last_accessed: "2026-03-03" }
|
|
353
|
+
associations:
|
|
354
|
+
- { target_type: engram, target: ENG-2026-0303-022, type: semantic, strength: 0.5 }
|
|
355
|
+
- { target_type: engram, target: ENG-2026-0303-027, type: semantic, strength: 0.7 }
|
|
356
|
+
- { target_type: engram, target: ENG-2026-0303-015, type: semantic, strength: 0.5 }
|
|
357
|
+
dual_coding:
|
|
358
|
+
analogy: "Like browser extensions — each gets a sandboxed environment (own storage, limited API), must declare permissions in manifest, and can't directly modify the browser's core UI or data"
|
|
359
|
+
pack: mcp-design-guidelines
|
|
360
|
+
|
|
361
|
+
- id: ENG-2026-0303-027
|
|
362
|
+
version: 2
|
|
363
|
+
status: active
|
|
364
|
+
type: procedural
|
|
365
|
+
scope: global
|
|
366
|
+
visibility: public
|
|
367
|
+
statement: >-
|
|
368
|
+
Non-critical MCP subsystems (gamification, analytics, optional features) must never crash core tools. Wrap
|
|
369
|
+
optional subsystems in try/catch error boundaries. Design subsystem boundaries so failures are isolated — if an
|
|
370
|
+
optional feature fails, primary tool functionality still works.
|
|
371
|
+
tags: [mcp, agent-ux, error-handling, resilience]
|
|
372
|
+
domain: software.mcp.resilience
|
|
373
|
+
activation: { retrieval_strength: 0.7, storage_strength: 1, frequency: 0, last_accessed: "2026-03-03" }
|
|
374
|
+
associations:
|
|
375
|
+
- { target_type: engram, target: ENG-2026-0303-026, type: semantic, strength: 0.7 }
|
|
376
|
+
- { target_type: engram, target: ENG-2026-0303-023, type: semantic, strength: 0.6 }
|
|
377
|
+
- { target_type: engram, target: ENG-2026-0303-018, type: semantic, strength: 0.5 }
|
|
378
|
+
dual_coding:
|
|
379
|
+
analogy: "Like watertight compartments on a ship — if the entertainment system floods, the engine room stays dry. Gamification crashing should never prevent a user from saving their work"
|
|
380
|
+
pack: mcp-design-guidelines
|