@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.
@@ -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