@ema.co/mcp-toolkit 2026.1.25 → 2026.1.26-4
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.
Potentially problematic release.
This version of @ema.co/mcp-toolkit might be problematic. Click here for more details.
- package/README.md +10 -2
- package/dist/mcp/handlers/action/index.js +3 -18
- package/dist/mcp/handlers/data/index.js +385 -41
- package/dist/mcp/handlers/data/templates.js +107 -0
- package/dist/mcp/handlers/deprecation.js +50 -0
- package/dist/mcp/handlers/env/index.js +8 -4
- package/dist/mcp/handlers/knowledge/index.js +44 -237
- package/dist/mcp/handlers/persona/create.js +47 -18
- package/dist/mcp/handlers/persona/index.js +14 -11
- package/dist/mcp/handlers/persona/update.js +4 -2
- package/dist/mcp/handlers/persona/version.js +234 -0
- package/dist/mcp/handlers/sync/index.js +3 -18
- package/dist/mcp/handlers/template/index.js +75 -10
- package/dist/mcp/handlers/workflow/analyze.js +171 -0
- package/dist/mcp/handlers/workflow/compare.js +70 -0
- package/dist/mcp/handlers/workflow/deploy.js +73 -0
- package/dist/mcp/handlers/workflow/generate.js +350 -0
- package/dist/mcp/handlers/workflow/index.js +294 -0
- package/dist/mcp/handlers/workflow/modify.js +456 -0
- package/dist/mcp/handlers/workflow/optimize.js +136 -0
- package/dist/mcp/handlers/workflow/types.js +4 -0
- package/dist/mcp/handlers/workflow/utils.js +30 -0
- package/dist/mcp/handlers-consolidated.js +73 -2696
- package/dist/mcp/prompts.js +83 -43
- package/dist/mcp/resources.js +382 -57
- package/dist/mcp/server.js +199 -391
- package/dist/mcp/{tools-v2.js → tools.js} +20 -54
- package/dist/mcp/workflow-operations.js +2 -2
- package/dist/sdk/client-adapter.js +267 -32
- package/dist/sdk/client.js +45 -16
- package/dist/sdk/ema-client.js +183 -0
- package/dist/sdk/generated/deprecated-actions.js +171 -0
- package/dist/sdk/generated/template-fallbacks.js +123 -0
- package/dist/sdk/guidance.js +65 -11
- package/dist/sdk/index.js +3 -1
- package/dist/sdk/knowledge.js +139 -86
- package/dist/sdk/workflow-intent.js +27 -0
- package/dist/sdk/workflow-transformer.js +0 -342
- package/docs/mcp-tools-guide.md +37 -45
- package/package.json +10 -4
- package/dist/mcp/handlers/persona/analyze.js +0 -275
- package/dist/mcp/handlers/persona/compare.js +0 -32
- package/dist/mcp/tools-consolidated.js +0 -875
- package/dist/mcp/tools-legacy.js +0 -736
- package/docs/CODEBASE-ANALYSIS-2026-01-23.md +0 -936
- package/docs/CODEBASE-ANALYSIS-PRIORITIZED.md +0 -774
- package/docs/api-contracts.md +0 -216
- package/docs/auto-builder-analysis.md +0 -271
- package/docs/blog/mcp-tool-design-lessons.md +0 -309
- package/docs/data-architecture.md +0 -166
- package/docs/demos/ap-invoice-generation.md +0 -347
- package/docs/demos/ap-invoice-processing.md +0 -271
- package/docs/ema-auto-builder-guide.html +0 -394
- package/docs/lessons-learned.md +0 -209
- package/docs/llm-native-workflow-design.md +0 -252
- package/docs/local-generation.md +0 -508
- package/docs/mcp-flow-diagram.md +0 -135
- package/docs/migration/action-composition-migration.md +0 -270
- package/docs/naming-conventions.md +0 -278
- package/docs/proposals/HANDOFF-tool-restructure.md +0 -526
- package/docs/proposals/action-composition.md +0 -490
- package/docs/proposals/explicit-method-restructure.md +0 -328
- package/docs/proposals/mcp-tool-restructure-2026-01.md +0 -366
- package/docs/proposals/self-contained-guidance.md +0 -427
- package/docs/proto-sdk-generation.md +0 -242
- package/docs/release-impact.md +0 -102
- package/docs/release-process.md +0 -157
- package/docs/staging.RULE.md +0 -142
- package/docs/test-persona-creation.md +0 -196
- package/docs/tool-consolidation-v2.md +0 -225
- package/docs/tool-response-standards.md +0 -256
- package/resources/demo-kits/README.md +0 -175
- package/resources/demo-kits/finance-ap/manifest.json +0 -150
- package/resources/demo-kits/tags.json +0 -91
- package/resources/docs/getting-started.md +0 -97
- package/resources/templates/auto-builder-rules.md +0 -224
- package/resources/templates/chat-ai/README.md +0 -119
- package/resources/templates/chat-ai/persona-config.json +0 -111
- package/resources/templates/dashboard-ai/README.md +0 -156
- package/resources/templates/dashboard-ai/persona-config.json +0 -180
- package/resources/templates/demo-scenarios/README.md +0 -63
- package/resources/templates/demo-scenarios/test-published-package.md +0 -116
- package/resources/templates/document-gen-ai/README.md +0 -132
- package/resources/templates/document-gen-ai/persona-config.json +0 -316
- package/resources/templates/voice-ai/README.md +0 -123
- package/resources/templates/voice-ai/persona-config.json +0 -74
- package/resources/templates/voice-ai/workflow-prompt.md +0 -121
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
# MCP Tool Consolidation v2
|
|
2
|
-
|
|
3
|
-
> **Status: IMPLEMENTED** (v2026.01.17)
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
Consolidate tools with cleaner separation of concerns.
|
|
8
|
-
|
|
9
|
-
**Primary tools (use these):**
|
|
10
|
-
- `persona` - AI Employee management
|
|
11
|
-
- `data` - Persona data management
|
|
12
|
-
- `reference` - All reference info (envs, actions, templates, patterns, concepts)
|
|
13
|
-
- `sync` - Cross-environment sync
|
|
14
|
-
|
|
15
|
-
**Legacy tools (still work, route to primary):**
|
|
16
|
-
- `env`, `action`, `template`, `knowledge`, `demo`
|
|
17
|
-
|
|
18
|
-
## Final Tool Design
|
|
19
|
-
|
|
20
|
-
### 1. `persona` - Manage AI Employees
|
|
21
|
-
|
|
22
|
-
```typescript
|
|
23
|
-
persona(
|
|
24
|
-
id?: string, // get specific persona
|
|
25
|
-
query?: string, // search by name
|
|
26
|
-
all?: boolean, // list all
|
|
27
|
-
|
|
28
|
-
// Create/Clone
|
|
29
|
-
name?: string, // for create
|
|
30
|
-
type?: "voice" | "chat" | "dashboard",
|
|
31
|
-
input?: string, // natural language description
|
|
32
|
-
clone_from?: string, // clone source persona ID
|
|
33
|
-
clone_data?: boolean, // also clone files
|
|
34
|
-
sanitize?: boolean, // sanitize PII during clone
|
|
35
|
-
|
|
36
|
-
// Update
|
|
37
|
-
enabled?: boolean, // enable/disable
|
|
38
|
-
|
|
39
|
-
// Compare
|
|
40
|
-
compare_to?: string, // compare two personas
|
|
41
|
-
|
|
42
|
-
// Output control
|
|
43
|
-
include_workflow?: boolean, // include workflow_def in response
|
|
44
|
-
)
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
**Examples:**
|
|
48
|
-
```
|
|
49
|
-
persona(all=true) # list all
|
|
50
|
-
persona(id="abc-123") # get specific
|
|
51
|
-
persona(query="support") # search
|
|
52
|
-
persona(name="My Bot", type="voice", input="...") # create
|
|
53
|
-
persona(clone_from="abc", name="Clone", clone_data=true, sanitize=true)
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
### 2. `data` - Manage Persona Data
|
|
59
|
-
|
|
60
|
-
```typescript
|
|
61
|
-
data(
|
|
62
|
-
persona_id: string, // REQUIRED - data belongs to persona
|
|
63
|
-
mode?: "list" | "get" | "upload" | "delete" | "sanitize", // default: list
|
|
64
|
-
file_id?: string, // for get/delete specific
|
|
65
|
-
include_results?: boolean, // for dashboard: show extracted values
|
|
66
|
-
)
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
**Examples:**
|
|
70
|
-
```
|
|
71
|
-
data(persona_id="abc") # list files
|
|
72
|
-
data(persona_id="abc", file_id="x") # get file details
|
|
73
|
-
data(persona_id="abc", mode="upload") # upload (file from context)
|
|
74
|
-
data(persona_id="abc", mode="delete", file_id="x")
|
|
75
|
-
data(persona_id="abc", mode="sanitize") # sanitize all data
|
|
76
|
-
data(persona_id="abc", include_results=true) # list with extraction results
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
**For dashboard personas, file listing includes:**
|
|
80
|
-
```json
|
|
81
|
-
{
|
|
82
|
-
"files": [{
|
|
83
|
-
"id": "file-123",
|
|
84
|
-
"name": "contract.pdf",
|
|
85
|
-
"processing": {
|
|
86
|
-
"status": "success",
|
|
87
|
-
"extracted": { "vendor": "Acme", "amount": "$50k" }
|
|
88
|
-
}
|
|
89
|
-
}]
|
|
90
|
-
}
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
---
|
|
94
|
-
|
|
95
|
-
### 3. `workflow` - Workflow Operations
|
|
96
|
-
|
|
97
|
-
```typescript
|
|
98
|
-
workflow(
|
|
99
|
-
persona_id?: string, // target persona
|
|
100
|
-
|
|
101
|
-
// Generate/Modify
|
|
102
|
-
input?: string, // natural language description
|
|
103
|
-
|
|
104
|
-
// Analyze
|
|
105
|
-
analyze?: boolean, // analyze current workflow
|
|
106
|
-
optimize?: boolean, // suggest optimizations
|
|
107
|
-
|
|
108
|
-
// Deploy
|
|
109
|
-
workflow_def?: object, // direct workflow deployment
|
|
110
|
-
preview?: boolean, // preview without deploying (default: true)
|
|
111
|
-
)
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
**Examples:**
|
|
115
|
-
```
|
|
116
|
-
workflow(persona_id="abc", input="Add email notification")
|
|
117
|
-
workflow(persona_id="abc", analyze=true)
|
|
118
|
-
workflow(persona_id="abc", optimize=true, preview=false)
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
### 4. `reference` - All Reference Information
|
|
124
|
-
|
|
125
|
-
```typescript
|
|
126
|
-
reference(
|
|
127
|
-
type?: "actions" | "templates" | "patterns" | "envs" | "concepts" | "guidance",
|
|
128
|
-
|
|
129
|
-
// For actions
|
|
130
|
-
action_id?: string, // get specific action
|
|
131
|
-
query?: string, // search
|
|
132
|
-
suggest?: string, // suggest actions for use case
|
|
133
|
-
|
|
134
|
-
// For guidance
|
|
135
|
-
topic?: string, // guidance topic
|
|
136
|
-
|
|
137
|
-
// For concepts
|
|
138
|
-
concept?: string, // specific concept
|
|
139
|
-
|
|
140
|
-
// Validation helpers
|
|
141
|
-
check_types?: { source: string, target: string },
|
|
142
|
-
validate_prompt?: string,
|
|
143
|
-
)
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
**Examples:**
|
|
147
|
-
```
|
|
148
|
-
reference(type="actions") # list all actions
|
|
149
|
-
reference(type="actions", query="email") # search actions
|
|
150
|
-
reference(type="actions", suggest="IT helpdesk")
|
|
151
|
-
reference(action_id="send_email") # get specific action
|
|
152
|
-
reference(type="templates") # list workflow templates
|
|
153
|
-
reference(type="patterns") # list patterns
|
|
154
|
-
reference(type="envs") # list environments
|
|
155
|
-
reference(type="concepts") # list concepts
|
|
156
|
-
reference(concept="HITL") # get specific concept
|
|
157
|
-
reference(type="guidance", topic="categorizer-routing")
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
---
|
|
161
|
-
|
|
162
|
-
### 5. `sync` - Environment Sync
|
|
163
|
-
|
|
164
|
-
```typescript
|
|
165
|
-
sync(
|
|
166
|
-
id?: string, // persona ID or name
|
|
167
|
-
target?: string, // target environment
|
|
168
|
-
dry_run?: boolean, // simulate without changes
|
|
169
|
-
|
|
170
|
-
// Status
|
|
171
|
-
mode?: "run" | "status" | "config",
|
|
172
|
-
list_synced?: boolean, // list all synced personas
|
|
173
|
-
)
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
**Examples:**
|
|
177
|
-
```
|
|
178
|
-
sync(id="IT Support", target="dev")
|
|
179
|
-
sync(id="abc-123", target="staging", dry_run=true)
|
|
180
|
-
sync(mode="status", id="abc-123")
|
|
181
|
-
sync(mode="config")
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
---
|
|
185
|
-
|
|
186
|
-
## Migration Path
|
|
187
|
-
|
|
188
|
-
| Old Tool | New Location |
|
|
189
|
-
|----------|--------------|
|
|
190
|
-
| `env` | `reference(type="envs")` |
|
|
191
|
-
| `knowledge` | `data` |
|
|
192
|
-
| `demo` | Removed (generate separately or future addition) |
|
|
193
|
-
| `action` | `reference(type="actions")` |
|
|
194
|
-
| `template` | `reference(type="templates")` / `reference(type="patterns")` |
|
|
195
|
-
|
|
196
|
-
## Mental Model
|
|
197
|
-
|
|
198
|
-
```
|
|
199
|
-
┌─────────────────────────────────────────┐
|
|
200
|
-
│ PERSONA │
|
|
201
|
-
│ ┌─────────┐ ┌──────────┐ │
|
|
202
|
-
│ │ data │ │ workflow │ │
|
|
203
|
-
│ └─────────┘ └──────────┘ │
|
|
204
|
-
└─────────────────────────────────────────┘
|
|
205
|
-
│ │
|
|
206
|
-
└──────┬───────┘
|
|
207
|
-
│
|
|
208
|
-
┌───────────▼───────────┐
|
|
209
|
-
│ reference │ (actions, templates, guidance)
|
|
210
|
-
└───────────────────────┘
|
|
211
|
-
│
|
|
212
|
-
┌───────────▼───────────┐
|
|
213
|
-
│ sync │ (copy between envs)
|
|
214
|
-
└───────────────────────┘
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
## Implementation Checklist
|
|
218
|
-
|
|
219
|
-
- [x] Update `tools-consolidated.ts` with new tool definitions
|
|
220
|
-
- [x] Update `handlers-consolidated.ts` with routing logic
|
|
221
|
-
- [x] Add `data` tool (wraps knowledge with simplified interface)
|
|
222
|
-
- [x] Expand `reference` to support type="envs|actions|templates|patterns|widgets"
|
|
223
|
-
- [x] Update tests
|
|
224
|
-
- [x] Update documentation
|
|
225
|
-
- [x] Keep legacy tools for backwards compatibility (they still work)
|
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
# MCP Tool Response Standards
|
|
2
|
-
|
|
3
|
-
Uniform structure and formatting rules for all MCP tool responses.
|
|
4
|
-
|
|
5
|
-
## Core Principles
|
|
6
|
-
|
|
7
|
-
1. **Explicit over implicit**: Always return clear status, never silently succeed/fail
|
|
8
|
-
2. **Actionable responses**: Include next steps, commands, or guidance
|
|
9
|
-
3. **Consistent shape**: Same response structure within each mode category
|
|
10
|
-
4. **Progressive disclosure**: Summary first, details on request
|
|
11
|
-
|
|
12
|
-
## Response Categories
|
|
13
|
-
|
|
14
|
-
### 1. Success Responses
|
|
15
|
-
|
|
16
|
-
```typescript
|
|
17
|
-
{
|
|
18
|
-
status: "success",
|
|
19
|
-
// Primary result data
|
|
20
|
-
[result_key]: data,
|
|
21
|
-
// Optional metadata
|
|
22
|
-
_meta?: {
|
|
23
|
-
duration_ms?: number;
|
|
24
|
-
cached?: boolean;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### 2. Error Responses
|
|
30
|
-
|
|
31
|
-
```typescript
|
|
32
|
-
{
|
|
33
|
-
status: "error",
|
|
34
|
-
error: "Short error message",
|
|
35
|
-
details?: "Longer explanation",
|
|
36
|
-
suggestion?: "How to fix",
|
|
37
|
-
code?: "ERROR_CODE"
|
|
38
|
-
}
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### 3. Clarification Responses
|
|
42
|
-
|
|
43
|
-
When mode is omitted or ambiguous:
|
|
44
|
-
|
|
45
|
-
```typescript
|
|
46
|
-
{
|
|
47
|
-
status: "clarification_needed",
|
|
48
|
-
message: "What operation would you like?",
|
|
49
|
-
suggested_mode?: "mode_name", // If intent is detectable
|
|
50
|
-
options: ["mode1", "mode2", ...],
|
|
51
|
-
hint?: "Use mode='...' for direct execution",
|
|
52
|
-
examples?: ["command1", "command2"]
|
|
53
|
-
}
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
### 4. Analysis Responses
|
|
57
|
-
|
|
58
|
-
For analyze/review/audit operations:
|
|
59
|
-
|
|
60
|
-
```typescript
|
|
61
|
-
{
|
|
62
|
-
status: "healthy" | "issues_found" | "critical",
|
|
63
|
-
summary: {
|
|
64
|
-
total_issues: number,
|
|
65
|
-
by_severity: { critical: number, warning: number, info: number },
|
|
66
|
-
by_category?: Record<string, number>
|
|
67
|
-
},
|
|
68
|
-
issues: Array<{
|
|
69
|
-
id: string,
|
|
70
|
-
severity: "critical" | "warning" | "info",
|
|
71
|
-
category: string,
|
|
72
|
-
title: string,
|
|
73
|
-
description: string,
|
|
74
|
-
auto_fixable: boolean,
|
|
75
|
-
fix_description?: string
|
|
76
|
-
}>,
|
|
77
|
-
next_steps: {
|
|
78
|
-
auto_fix_available: boolean,
|
|
79
|
-
command?: string,
|
|
80
|
-
manual_actions?: string[]
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
### 5. List Responses
|
|
86
|
-
|
|
87
|
-
```typescript
|
|
88
|
-
{
|
|
89
|
-
count: number,
|
|
90
|
-
[items_key]: Array<item>, // e.g., "personas", "files", "templates"
|
|
91
|
-
// Optional pagination
|
|
92
|
-
pagination?: {
|
|
93
|
-
offset: number,
|
|
94
|
-
limit: number,
|
|
95
|
-
has_more: boolean
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
### 6. Single Item Responses
|
|
101
|
-
|
|
102
|
-
```typescript
|
|
103
|
-
{
|
|
104
|
-
id: string,
|
|
105
|
-
name?: string,
|
|
106
|
-
// ... item-specific fields
|
|
107
|
-
_meta?: {
|
|
108
|
-
retrieved_at: string,
|
|
109
|
-
source: string
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## Mode + Flag Pattern
|
|
115
|
-
|
|
116
|
-
### Rule: Mode defines WHAT, flags define HOW
|
|
117
|
-
|
|
118
|
-
```typescript
|
|
119
|
-
// Mode = the operation type
|
|
120
|
-
mode: "analyze" | "list" | "get" | "create" | "update" | "delete" | ...
|
|
121
|
-
|
|
122
|
-
// Flags modify the operation behavior
|
|
123
|
-
fix: boolean // Auto-apply fixes (for analyze)
|
|
124
|
-
preview: boolean // Don't persist changes (for create/update)
|
|
125
|
-
include: string[] // What to include in response
|
|
126
|
-
force: boolean // Skip confirmations
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### Anti-Pattern: Mode as flag
|
|
130
|
-
|
|
131
|
-
```typescript
|
|
132
|
-
// ❌ BAD: Using mode to toggle behavior
|
|
133
|
-
mode: "optimize" // This is just mode="analyze" + fix=true
|
|
134
|
-
|
|
135
|
-
// ✅ GOOD: Clear mode + flag
|
|
136
|
-
mode: "analyze", fix: true
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
### Anti-Pattern: Flag that changes operation type
|
|
140
|
-
|
|
141
|
-
```typescript
|
|
142
|
-
// ❌ BAD: Flag changes what the operation does
|
|
143
|
-
mode: "get", optimize: true // Does this get or optimize?
|
|
144
|
-
|
|
145
|
-
// ✅ GOOD: Mode is explicit
|
|
146
|
-
mode: "analyze", fix: true // Analyze and apply fixes
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
## Severity Levels
|
|
150
|
-
|
|
151
|
-
| Level | Meaning | Action |
|
|
152
|
-
|-------|---------|--------|
|
|
153
|
-
| `critical` | Breaks functionality, must fix | Block deployment |
|
|
154
|
-
| `warning` | Degraded behavior, should fix | Warn on deployment |
|
|
155
|
-
| `info` | Improvement opportunity | Optional |
|
|
156
|
-
|
|
157
|
-
## Standard Fields
|
|
158
|
-
|
|
159
|
-
### Identifiers
|
|
160
|
-
|
|
161
|
-
- `id` - Primary identifier (UUID preferred)
|
|
162
|
-
- `name` - Human-readable name
|
|
163
|
-
- `identifier` - DEPRECATED, use `id`
|
|
164
|
-
|
|
165
|
-
### Status
|
|
166
|
-
|
|
167
|
-
- `status` - Current state: "active", "inactive", "draft", "error"
|
|
168
|
-
- `enabled` - Boolean toggle
|
|
169
|
-
|
|
170
|
-
### Timestamps
|
|
171
|
-
|
|
172
|
-
- Use ISO 8601 format
|
|
173
|
-
- Field names: `created_at`, `updated_at`, `retrieved_at`
|
|
174
|
-
|
|
175
|
-
## Tool-Specific Standards
|
|
176
|
-
|
|
177
|
-
### persona tool
|
|
178
|
-
|
|
179
|
-
| Mode | Primary Response Key | Status Field |
|
|
180
|
-
|------|---------------------|--------------|
|
|
181
|
-
| list | `personas` | `count` |
|
|
182
|
-
| get | (flat object) | `status` |
|
|
183
|
-
| create | `persona_id`, `name` | `success` |
|
|
184
|
-
| update | `updated` | `success` |
|
|
185
|
-
| analyze | `issues` | `status` (healthy/issues_found/critical) |
|
|
186
|
-
|
|
187
|
-
### data tool
|
|
188
|
-
|
|
189
|
-
| Mode | Primary Response Key | Status Field |
|
|
190
|
-
|------|---------------------|--------------|
|
|
191
|
-
| list | `files` | `count` |
|
|
192
|
-
| get | (flat object) | - |
|
|
193
|
-
| upload | `file_id` | `success` |
|
|
194
|
-
| generate | `document` | `status` |
|
|
195
|
-
| analyze | `issues` | `status` |
|
|
196
|
-
|
|
197
|
-
### sync tool
|
|
198
|
-
|
|
199
|
-
| Mode | Primary Response Key | Status Field |
|
|
200
|
-
|------|---------------------|--------------|
|
|
201
|
-
| run | `synced` | `success` |
|
|
202
|
-
| status | `sync_status` | `status` |
|
|
203
|
-
| config | `config` | - |
|
|
204
|
-
|
|
205
|
-
## Example: Uniform Analyze Response
|
|
206
|
-
|
|
207
|
-
```json
|
|
208
|
-
{
|
|
209
|
-
"status": "issues_found",
|
|
210
|
-
"summary": {
|
|
211
|
-
"total_issues": 5,
|
|
212
|
-
"by_severity": { "critical": 0, "warning": 2, "info": 3 },
|
|
213
|
-
"by_category": { "workflow": 3, "config": 1, "data": 1 }
|
|
214
|
-
},
|
|
215
|
-
"issues": [
|
|
216
|
-
{
|
|
217
|
-
"id": "orphaned-node-1",
|
|
218
|
-
"severity": "warning",
|
|
219
|
-
"category": "workflow",
|
|
220
|
-
"title": "Orphaned node: general_inquiry handler",
|
|
221
|
-
"description": "Node 'call_llm_general' has no incoming connections",
|
|
222
|
-
"auto_fixable": true,
|
|
223
|
-
"fix_description": "Remove orphaned node"
|
|
224
|
-
},
|
|
225
|
-
{
|
|
226
|
-
"id": "missing-embedding-1",
|
|
227
|
-
"severity": "info",
|
|
228
|
-
"category": "data",
|
|
229
|
-
"title": "File without embedding",
|
|
230
|
-
"description": "company-faq.pdf has embedding disabled",
|
|
231
|
-
"auto_fixable": true,
|
|
232
|
-
"fix_description": "Enable embedding for file"
|
|
233
|
-
}
|
|
234
|
-
],
|
|
235
|
-
"next_steps": {
|
|
236
|
-
"auto_fix_available": true,
|
|
237
|
-
"command": "persona(mode=\"analyze\", id=\"...\", fix=true)",
|
|
238
|
-
"manual_actions": [
|
|
239
|
-
"Review orphaned node before removal",
|
|
240
|
-
"Verify FAQ file should be searchable"
|
|
241
|
-
]
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
## Checklist for New Modes
|
|
247
|
-
|
|
248
|
-
When adding a new mode to any tool:
|
|
249
|
-
|
|
250
|
-
- [ ] Response follows category pattern (success/error/list/analysis)
|
|
251
|
-
- [ ] Error responses include `suggestion` field
|
|
252
|
-
- [ ] Status field uses standard values
|
|
253
|
-
- [ ] Identifiers use `id` not `identifier`
|
|
254
|
-
- [ ] List responses have `count` + array field
|
|
255
|
-
- [ ] Analysis responses have `summary` + `issues` + `next_steps`
|
|
256
|
-
- [ ] Flags don't change operation type (only modify behavior)
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
# Demo Kits
|
|
2
|
-
|
|
3
|
-
Pre-packaged demo resources for Ema AI Employee demonstrations. Each kit includes personas, demo scripts, sample data, and validation queries.
|
|
4
|
-
|
|
5
|
-
## Available Demo Kits
|
|
6
|
-
|
|
7
|
-
| Kit ID | Name | Domain | Personas | Tags |
|
|
8
|
-
|--------|------|--------|----------|------|
|
|
9
|
-
| `finance-ap` | Finance - Accounts Payable | Finance | 2 | `finance`, `invoice`, `automation` |
|
|
10
|
-
| `finance-ar` | Finance - Accounts Receivable | Finance | 1 | `finance`, `billing`, `revenue` |
|
|
11
|
-
| `sales-sdr` | Sales Development | Sales | 2 | `sales`, `outbound`, `prospecting` |
|
|
12
|
-
| `support-tier1` | Customer Support T1 | Support | 2 | `support`, `voice`, `chat` |
|
|
13
|
-
| `hr-assistant` | HR Policy Assistant | HR | 1 | `hr`, `policy`, `benefits` |
|
|
14
|
-
|
|
15
|
-
## Kit Structure
|
|
16
|
-
|
|
17
|
-
Each demo kit contains:
|
|
18
|
-
|
|
19
|
-
```
|
|
20
|
-
demo-kits/
|
|
21
|
-
├── {kit-id}/
|
|
22
|
-
│ ├── manifest.json # Kit metadata, personas, tags
|
|
23
|
-
│ ├── demo-script.md # Talk track, objections, ROI
|
|
24
|
-
│ ├── sample-data/ # Demo data files
|
|
25
|
-
│ │ ├── input.json # Sample inputs
|
|
26
|
-
│ │ └── expected.json # Expected outputs
|
|
27
|
-
│ └── validation/
|
|
28
|
-
│ └── queries.json # Pre/post-demo validation queries
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Usage
|
|
32
|
-
|
|
33
|
-
### List Available Kits
|
|
34
|
-
|
|
35
|
-
```
|
|
36
|
-
reference(demo_kits=true)
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### Get Kit Details
|
|
40
|
-
|
|
41
|
-
```
|
|
42
|
-
reference(demo_kit="finance-ap")
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
### Generate Demo for Persona
|
|
46
|
-
|
|
47
|
-
```
|
|
48
|
-
persona(method="demo_kit", id="{persona_id}", kit="finance-ap")
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
### Validate Demo Readiness
|
|
52
|
-
|
|
53
|
-
```
|
|
54
|
-
persona(method="validate", id="{persona_id}", checks=["demo_ready"])
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
## Tagging System
|
|
58
|
-
|
|
59
|
-
Demo kits and personas use a consistent tagging system:
|
|
60
|
-
|
|
61
|
-
### Domain Tags
|
|
62
|
-
- `finance` - Financial operations (AP, AR, Treasury)
|
|
63
|
-
- `sales` - Sales and revenue operations
|
|
64
|
-
- `support` - Customer support and service
|
|
65
|
-
- `hr` - Human resources
|
|
66
|
-
- `it` - IT operations and security
|
|
67
|
-
- `legal` - Legal and compliance
|
|
68
|
-
- `marketing` - Marketing operations
|
|
69
|
-
|
|
70
|
-
### Capability Tags
|
|
71
|
-
- `voice` - Voice/phone interactions
|
|
72
|
-
- `chat` - Chat/messaging interactions
|
|
73
|
-
- `dashboard` - Dashboard/data processing
|
|
74
|
-
- `document` - Document generation
|
|
75
|
-
- `automation` - Process automation
|
|
76
|
-
- `analysis` - Data analysis
|
|
77
|
-
|
|
78
|
-
### Use Case Tags
|
|
79
|
-
- `invoice` - Invoice processing
|
|
80
|
-
- `billing` - Billing operations
|
|
81
|
-
- `onboarding` - Employee/customer onboarding
|
|
82
|
-
- `compliance` - Compliance and audit
|
|
83
|
-
- `reporting` - Reporting and analytics
|
|
84
|
-
|
|
85
|
-
## Creating a Demo Kit
|
|
86
|
-
|
|
87
|
-
1. Create a folder in `demo-kits/`
|
|
88
|
-
2. Add `manifest.json` with kit metadata
|
|
89
|
-
3. Add `demo-script.md` with talk track
|
|
90
|
-
4. Add sample data and validation queries
|
|
91
|
-
5. Register personas in manifest
|
|
92
|
-
|
|
93
|
-
### Manifest Schema
|
|
94
|
-
|
|
95
|
-
```json
|
|
96
|
-
{
|
|
97
|
-
"id": "kit-id",
|
|
98
|
-
"name": "Kit Display Name",
|
|
99
|
-
"version": "1.0.0",
|
|
100
|
-
"description": "What this kit demonstrates",
|
|
101
|
-
"domain": "finance|sales|support|hr|it|legal|marketing",
|
|
102
|
-
"tags": ["tag1", "tag2"],
|
|
103
|
-
"personas": [
|
|
104
|
-
{
|
|
105
|
-
"id": "uuid",
|
|
106
|
-
"name": "Persona Name",
|
|
107
|
-
"role": "primary|supporting",
|
|
108
|
-
"description": "What this persona does in the demo"
|
|
109
|
-
}
|
|
110
|
-
],
|
|
111
|
-
"prerequisites": {
|
|
112
|
-
"integrations": ["coupa", "salesforce"],
|
|
113
|
-
"data": ["sample-invoices"],
|
|
114
|
-
"environment": "demo"
|
|
115
|
-
},
|
|
116
|
-
"demo_flow": [
|
|
117
|
-
{
|
|
118
|
-
"step": 1,
|
|
119
|
-
"title": "Setup",
|
|
120
|
-
"duration_minutes": 2,
|
|
121
|
-
"actions": ["Load persona", "Prepare data"]
|
|
122
|
-
}
|
|
123
|
-
],
|
|
124
|
-
"target_audience": {
|
|
125
|
-
"primary": "AP Manager",
|
|
126
|
-
"secondary": ["CFO", "IT Director"],
|
|
127
|
-
"company_size": "mid-market",
|
|
128
|
-
"industries": ["manufacturing", "retail"]
|
|
129
|
-
},
|
|
130
|
-
"roi_metrics": {
|
|
131
|
-
"time_saved_per_unit": "15 minutes",
|
|
132
|
-
"volume_per_month": 10000,
|
|
133
|
-
"cost_per_unit_before": 12,
|
|
134
|
-
"cost_per_unit_after": 1.5
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
## Bundling Multiple Kits
|
|
140
|
-
|
|
141
|
-
Create meta-kits that combine related demos:
|
|
142
|
-
|
|
143
|
-
```json
|
|
144
|
-
{
|
|
145
|
-
"id": "finance-complete",
|
|
146
|
-
"name": "Complete Finance Automation",
|
|
147
|
-
"type": "bundle",
|
|
148
|
-
"includes": ["finance-ap", "finance-ar", "finance-reporting"],
|
|
149
|
-
"tags": ["finance", "bundle", "enterprise"]
|
|
150
|
-
}
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
## Integration with Persona Tool
|
|
154
|
-
|
|
155
|
-
The `persona` tool supports kit-related operations:
|
|
156
|
-
|
|
157
|
-
```
|
|
158
|
-
# Tag a persona
|
|
159
|
-
persona(method="update", id="...", tags=["finance", "invoice"])
|
|
160
|
-
|
|
161
|
-
# Find personas by tag
|
|
162
|
-
persona(method="list", tags=["finance"])
|
|
163
|
-
|
|
164
|
-
# Get demo kit for persona
|
|
165
|
-
persona(method="demo_kit", id="...")
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
## Quality Standards
|
|
169
|
-
|
|
170
|
-
Each demo kit must:
|
|
171
|
-
- [ ] Have validated sample data
|
|
172
|
-
- [ ] Include error handling scenarios
|
|
173
|
-
- [ ] Work in demo environment
|
|
174
|
-
- [ ] Include realistic ROI numbers
|
|
175
|
-
- [ ] Have tested validation queries
|