@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,111 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://ema.co/schemas/persona-config-chat.json",
|
|
3
|
-
"$comment": "Chat AI Persona Configuration - Fill in all {placeholder} values",
|
|
4
|
-
|
|
5
|
-
"personaType": "chat",
|
|
6
|
-
"projectType": 4,
|
|
7
|
-
"name": "{Persona Name}",
|
|
8
|
-
"description": "{Brief description of what this Chat AI does}",
|
|
9
|
-
|
|
10
|
-
"chatbotSdkConfig": {
|
|
11
|
-
"name": "{Display name shown in chat widget}",
|
|
12
|
-
"theme": {
|
|
13
|
-
"primaryColor": "#1f8844",
|
|
14
|
-
"$comment": "Hex color for chat widget theme"
|
|
15
|
-
},
|
|
16
|
-
"logo": "",
|
|
17
|
-
"$comment_logo": "URL to logo image (optional)",
|
|
18
|
-
"allowedDomains": ["*"],
|
|
19
|
-
"$comment_allowedDomains": "Domains where widget can be embedded. Use ['*'] for all, or specific domains",
|
|
20
|
-
"disableSources": false,
|
|
21
|
-
"$comment_disableSources": "Set true to hide source citations"
|
|
22
|
-
},
|
|
23
|
-
|
|
24
|
-
"fileTagging": {
|
|
25
|
-
"tagTypes": [
|
|
26
|
-
{
|
|
27
|
-
"name": "Department",
|
|
28
|
-
"tags": [
|
|
29
|
-
{ "tagValue": "Department:HR" },
|
|
30
|
-
{ "tagValue": "Department:IT" },
|
|
31
|
-
{ "tagValue": "Department:Finance" }
|
|
32
|
-
]
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
"name": "DocType",
|
|
36
|
-
"tags": [
|
|
37
|
-
{ "tagValue": "DocType:Policy" },
|
|
38
|
-
{ "tagValue": "DocType:Procedure" },
|
|
39
|
-
{ "tagValue": "DocType:FAQ" }
|
|
40
|
-
]
|
|
41
|
-
}
|
|
42
|
-
],
|
|
43
|
-
"$comment": "Define tag categories and values for knowledge base filtering"
|
|
44
|
-
},
|
|
45
|
-
|
|
46
|
-
"fileUpload": {
|
|
47
|
-
"localFiles": [],
|
|
48
|
-
"mergeFiles": [],
|
|
49
|
-
"tags": ["{default-tag}"],
|
|
50
|
-
"$comment_tags": "Default tags applied to all uploads",
|
|
51
|
-
"transforms": [],
|
|
52
|
-
"useChunking": true,
|
|
53
|
-
"$comment_useChunking": "Enable for better search on long documents",
|
|
54
|
-
"fileTagMappings": [],
|
|
55
|
-
"acceptedMimeTypes": [
|
|
56
|
-
"application/pdf",
|
|
57
|
-
"text/plain",
|
|
58
|
-
"text/markdown",
|
|
59
|
-
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
60
|
-
"text/csv"
|
|
61
|
-
]
|
|
62
|
-
},
|
|
63
|
-
|
|
64
|
-
"feedbackMessage": {
|
|
65
|
-
"message": {
|
|
66
|
-
"question": "Was this answer helpful?",
|
|
67
|
-
"positiveLabel": "Yes, helpful",
|
|
68
|
-
"negativeLabel": "No, not helpful"
|
|
69
|
-
},
|
|
70
|
-
"feedbackFrequency": 1,
|
|
71
|
-
"$comment_feedbackFrequency": "1 = every response, 3 = every 3rd response"
|
|
72
|
-
},
|
|
73
|
-
|
|
74
|
-
"dataProtection": {
|
|
75
|
-
"protectedClasses": [
|
|
76
|
-
"ssn",
|
|
77
|
-
"credit_card"
|
|
78
|
-
],
|
|
79
|
-
"$comment": "PII classes to redact from responses"
|
|
80
|
-
},
|
|
81
|
-
|
|
82
|
-
"fusionModel": {
|
|
83
|
-
"allModels": true,
|
|
84
|
-
"selectedModels": []
|
|
85
|
-
},
|
|
86
|
-
|
|
87
|
-
"knowledgeBaseSettings": {
|
|
88
|
-
"$comment": "These settings guide how the knowledge base should be configured",
|
|
89
|
-
"sources": [
|
|
90
|
-
{
|
|
91
|
-
"name": "{Source 1 Name}",
|
|
92
|
-
"type": "documents",
|
|
93
|
-
"folder": "docs/{folder1}",
|
|
94
|
-
"tags": ["{tag1}", "{tag2}"],
|
|
95
|
-
"priority": "primary"
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
"name": "{Source 2 Name}",
|
|
99
|
-
"type": "documents",
|
|
100
|
-
"folder": "docs/{folder2}",
|
|
101
|
-
"tags": ["{tag3}"],
|
|
102
|
-
"priority": "secondary"
|
|
103
|
-
}
|
|
104
|
-
],
|
|
105
|
-
"searchSettings": {
|
|
106
|
-
"useSemanticSearch": true,
|
|
107
|
-
"useKeywordSearch": true,
|
|
108
|
-
"maxResults": 5
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
# {Persona Name}
|
|
2
|
-
|
|
3
|
-
**Type**: Dashboard AI
|
|
4
|
-
**Created**: {Date}
|
|
5
|
-
**Version**: 1.0
|
|
6
|
-
|
|
7
|
-
## Overview
|
|
8
|
-
|
|
9
|
-
{Brief description of what this Dashboard AI Employee does}
|
|
10
|
-
|
|
11
|
-
## Deployment Steps
|
|
12
|
-
|
|
13
|
-
### Step 1: Create Workflow in Auto Builder
|
|
14
|
-
|
|
15
|
-
1. Go to [Ema Auto Builder](https://builder.ema.co/)
|
|
16
|
-
2. Create new AI Employee → Select **Dashboard AI**
|
|
17
|
-
3. Copy contents of `workflow-prompt.md` into the prompt field
|
|
18
|
-
4. Click "Generate Workflow"
|
|
19
|
-
5. Review generated nodes and verify:
|
|
20
|
-
- Document trigger configured correctly
|
|
21
|
-
- Entity extraction columns defined
|
|
22
|
-
- Rule validation rules specified
|
|
23
|
-
- All processing paths complete
|
|
24
|
-
|
|
25
|
-
### Step 2: Configure Input Schema
|
|
26
|
-
|
|
27
|
-
1. Navigate to "Input Configuration" section
|
|
28
|
-
2. Define input fields from `persona-config.json`:
|
|
29
|
-
|
|
30
|
-
| Field | Type | Required |
|
|
31
|
-
|-------|------|----------|
|
|
32
|
-
| {field1} | {type} | {yes/no} |
|
|
33
|
-
| {field2} | {type} | {yes/no} |
|
|
34
|
-
|
|
35
|
-
### Step 3: Configure Processing Settings
|
|
36
|
-
|
|
37
|
-
1. Navigate to "Processing" section
|
|
38
|
-
2. Apply settings:
|
|
39
|
-
- Batch Size: `dashboardSettings.batchSettings.batchSize`
|
|
40
|
-
- Timeout: `dashboardSettings.batchSettings.timeout`
|
|
41
|
-
- Parallel: `dashboardSettings.batchSettings.parallelExecution`
|
|
42
|
-
|
|
43
|
-
### Step 4: Upload Reference Documents (if applicable)
|
|
44
|
-
|
|
45
|
-
1. Navigate to "Knowledge Base" section
|
|
46
|
-
2. Upload documents from `docs/` folder
|
|
47
|
-
3. Configure entity extraction mappings
|
|
48
|
-
|
|
49
|
-
### Step 5: Configure Approvals (if applicable)
|
|
50
|
-
|
|
51
|
-
1. Navigate to "Approval Routing" section
|
|
52
|
-
2. Define approval rules:
|
|
53
|
-
- Thresholds for auto-approval
|
|
54
|
-
- Routing rules for human review
|
|
55
|
-
- Escalation paths
|
|
56
|
-
|
|
57
|
-
### Step 6: Test
|
|
58
|
-
|
|
59
|
-
1. **Single Item Test**: Process one document
|
|
60
|
-
2. **Batch Test**: Process small batch (5-10 items)
|
|
61
|
-
3. **Edge Cases**:
|
|
62
|
-
- Missing required fields
|
|
63
|
-
- Invalid data formats
|
|
64
|
-
- Processing failures
|
|
65
|
-
|
|
66
|
-
## Files
|
|
67
|
-
|
|
68
|
-
| File | Description |
|
|
69
|
-
|------|-------------|
|
|
70
|
-
| `workflow-prompt.md` | Auto Builder prompt with safeguards |
|
|
71
|
-
| `persona-config.json` | Dashboard AI configuration |
|
|
72
|
-
| `proto-config.json` | Full API-deployable config |
|
|
73
|
-
| `docs/` | Reference documents |
|
|
74
|
-
|
|
75
|
-
## Testing Checklist
|
|
76
|
-
|
|
77
|
-
- [ ] Workflow generates without validation errors
|
|
78
|
-
- [ ] Document upload works
|
|
79
|
-
- [ ] Entity extraction accurate
|
|
80
|
-
- [ ] Rule validation correct
|
|
81
|
-
- [ ] Approval routing works
|
|
82
|
-
- [ ] Batch processing completes
|
|
83
|
-
- [ ] Error handling works
|
|
84
|
-
|
|
85
|
-
## Input Schema
|
|
86
|
-
|
|
87
|
-
```json
|
|
88
|
-
{
|
|
89
|
-
"fields": [
|
|
90
|
-
{
|
|
91
|
-
"name": "{field1}",
|
|
92
|
-
"type": "{string|number|date|file}",
|
|
93
|
-
"required": true,
|
|
94
|
-
"description": "{Field description}"
|
|
95
|
-
}
|
|
96
|
-
]
|
|
97
|
-
}
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
## Processing Flow
|
|
101
|
-
|
|
102
|
-
```
|
|
103
|
-
Input Document
|
|
104
|
-
│
|
|
105
|
-
▼
|
|
106
|
-
┌─────────────┐
|
|
107
|
-
│ Parse/OCR │
|
|
108
|
-
└─────────────┘
|
|
109
|
-
│
|
|
110
|
-
▼
|
|
111
|
-
┌─────────────┐
|
|
112
|
-
│ Extract │──→ {Field 1}
|
|
113
|
-
│ Entities │──→ {Field 2}
|
|
114
|
-
└─────────────┘──→ {Field N}
|
|
115
|
-
│
|
|
116
|
-
▼
|
|
117
|
-
┌─────────────┐
|
|
118
|
-
│ Validate │──→ Errors?
|
|
119
|
-
│ Rules │
|
|
120
|
-
└─────────────┘
|
|
121
|
-
│
|
|
122
|
-
▼
|
|
123
|
-
┌─────────────┐
|
|
124
|
-
│ Route for │──→ Auto-approve
|
|
125
|
-
│ Approval │──→ Human review
|
|
126
|
-
└─────────────┘──→ Reject
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
## Maintenance
|
|
130
|
-
|
|
131
|
-
| Change Type | Action |
|
|
132
|
-
|-------------|--------|
|
|
133
|
-
| Workflow logic | Update `workflow-prompt.md`, re-generate |
|
|
134
|
-
| Processing settings | Update `persona-config.json`, apply in UI |
|
|
135
|
-
| Extraction rules | Update entity extraction columns |
|
|
136
|
-
| Validation rules | Update rule validation configuration |
|
|
137
|
-
|
|
138
|
-
## Troubleshooting
|
|
139
|
-
|
|
140
|
-
### Processing fails
|
|
141
|
-
|
|
142
|
-
- Check document format is supported
|
|
143
|
-
- Verify required fields are present
|
|
144
|
-
- Review extraction column mappings
|
|
145
|
-
|
|
146
|
-
### Entity extraction inaccurate
|
|
147
|
-
|
|
148
|
-
- Add more training examples
|
|
149
|
-
- Refine extraction column definitions
|
|
150
|
-
- Check document quality
|
|
151
|
-
|
|
152
|
-
### Batch processing slow
|
|
153
|
-
|
|
154
|
-
- Reduce batch size
|
|
155
|
-
- Increase timeout
|
|
156
|
-
- Enable parallel execution
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://ema.co/schemas/persona-config-dashboard.json",
|
|
3
|
-
"$comment": "Dashboard AI Persona Configuration - Fill in all {placeholder} values",
|
|
4
|
-
|
|
5
|
-
"personaType": "dashboard",
|
|
6
|
-
"projectType": 2,
|
|
7
|
-
"name": "{Persona Name}",
|
|
8
|
-
"description": "{Brief description of what this Dashboard AI does}",
|
|
9
|
-
|
|
10
|
-
"dashboardSettings": {
|
|
11
|
-
"name": "{Display name}",
|
|
12
|
-
"description": "{What this dashboard processes}",
|
|
13
|
-
|
|
14
|
-
"inputSchema": {
|
|
15
|
-
"fields": [
|
|
16
|
-
{
|
|
17
|
-
"name": "{field1}",
|
|
18
|
-
"type": "file",
|
|
19
|
-
"required": true,
|
|
20
|
-
"description": "{Primary document to process}",
|
|
21
|
-
"acceptedTypes": ["application/pdf", "image/*"]
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
"name": "{field2}",
|
|
25
|
-
"type": "string",
|
|
26
|
-
"required": false,
|
|
27
|
-
"description": "{Optional text field}"
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
"name": "{field3}",
|
|
31
|
-
"type": "select",
|
|
32
|
-
"required": true,
|
|
33
|
-
"options": ["{option1}", "{option2}", "{option3}"],
|
|
34
|
-
"description": "{Category selection}"
|
|
35
|
-
}
|
|
36
|
-
]
|
|
37
|
-
},
|
|
38
|
-
|
|
39
|
-
"batchSettings": {
|
|
40
|
-
"batchSize": 50,
|
|
41
|
-
"$comment_batchSize": "Number of items per batch (1-100)",
|
|
42
|
-
"timeout": 60,
|
|
43
|
-
"$comment_timeout": "Seconds per item before timeout",
|
|
44
|
-
"parallelExecution": true,
|
|
45
|
-
"$comment_parallelExecution": "Process items in parallel"
|
|
46
|
-
},
|
|
47
|
-
|
|
48
|
-
"outputSchema": {
|
|
49
|
-
"fields": [
|
|
50
|
-
{
|
|
51
|
-
"name": "status",
|
|
52
|
-
"type": "enum",
|
|
53
|
-
"values": ["approved", "pending_review", "rejected"]
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
"name": "extracted_data",
|
|
57
|
-
"type": "object",
|
|
58
|
-
"description": "Extracted entity values"
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
"name": "validation_errors",
|
|
62
|
-
"type": "array",
|
|
63
|
-
"description": "List of validation failures"
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
"name": "confidence_score",
|
|
67
|
-
"type": "number",
|
|
68
|
-
"description": "0-1 confidence in extraction"
|
|
69
|
-
}
|
|
70
|
-
]
|
|
71
|
-
}
|
|
72
|
-
},
|
|
73
|
-
|
|
74
|
-
"entityExtraction": {
|
|
75
|
-
"columns": [
|
|
76
|
-
{
|
|
77
|
-
"name": "{Entity 1}",
|
|
78
|
-
"type": "string",
|
|
79
|
-
"description": "{What to extract}",
|
|
80
|
-
"examples": ["{example1}", "{example2}"]
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
"name": "{Entity 2}",
|
|
84
|
-
"type": "number",
|
|
85
|
-
"description": "{Numeric value to extract}",
|
|
86
|
-
"examples": ["{example1}", "{example2}"]
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
"name": "{Entity 3}",
|
|
90
|
-
"type": "date",
|
|
91
|
-
"description": "{Date to extract}",
|
|
92
|
-
"format": "YYYY-MM-DD"
|
|
93
|
-
}
|
|
94
|
-
],
|
|
95
|
-
"$comment": "Define columns for entity_extraction_with_documents action"
|
|
96
|
-
},
|
|
97
|
-
|
|
98
|
-
"ruleValidation": {
|
|
99
|
-
"rules": [
|
|
100
|
-
{
|
|
101
|
-
"name": "{Rule 1}",
|
|
102
|
-
"description": "{What this rule checks}",
|
|
103
|
-
"condition": "{Entity 1} is not empty",
|
|
104
|
-
"severity": "error"
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
"name": "{Rule 2}",
|
|
108
|
-
"description": "{What this rule checks}",
|
|
109
|
-
"condition": "{Entity 2} > 0",
|
|
110
|
-
"severity": "warning"
|
|
111
|
-
}
|
|
112
|
-
],
|
|
113
|
-
"$comment": "Define rules for rule_validation_with_documents action"
|
|
114
|
-
},
|
|
115
|
-
|
|
116
|
-
"approvalRouting": {
|
|
117
|
-
"rules": [
|
|
118
|
-
{
|
|
119
|
-
"name": "Auto-approve",
|
|
120
|
-
"condition": "confidence_score >= 0.95 AND validation_errors.length == 0",
|
|
121
|
-
"action": "auto_approve"
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
"name": "Manager Review",
|
|
125
|
-
"condition": "{amount} > 10000",
|
|
126
|
-
"action": "route_to_manager",
|
|
127
|
-
"assignee": "{manager_email}"
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
"name": "Reject",
|
|
131
|
-
"condition": "validation_errors contains 'critical'",
|
|
132
|
-
"action": "reject"
|
|
133
|
-
}
|
|
134
|
-
],
|
|
135
|
-
"sla": {
|
|
136
|
-
"standard": "24h",
|
|
137
|
-
"urgent": "4h",
|
|
138
|
-
"reminderAt": "50%",
|
|
139
|
-
"escalateAt": "100%"
|
|
140
|
-
}
|
|
141
|
-
},
|
|
142
|
-
|
|
143
|
-
"fileUpload": {
|
|
144
|
-
"localFiles": [],
|
|
145
|
-
"tags": ["{default-tag}"],
|
|
146
|
-
"useChunking": true,
|
|
147
|
-
"acceptedMimeTypes": [
|
|
148
|
-
"application/pdf",
|
|
149
|
-
"image/png",
|
|
150
|
-
"image/jpeg",
|
|
151
|
-
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|
|
152
|
-
]
|
|
153
|
-
},
|
|
154
|
-
|
|
155
|
-
"dataProtection": {
|
|
156
|
-
"protectedClasses": [
|
|
157
|
-
"ssn",
|
|
158
|
-
"credit_card",
|
|
159
|
-
"account_number"
|
|
160
|
-
]
|
|
161
|
-
},
|
|
162
|
-
|
|
163
|
-
"fusionModel": {
|
|
164
|
-
"allModels": true,
|
|
165
|
-
"selectedModels": []
|
|
166
|
-
},
|
|
167
|
-
|
|
168
|
-
"notifications": {
|
|
169
|
-
"onSuccess": {
|
|
170
|
-
"enabled": true,
|
|
171
|
-
"recipients": ["{email}"],
|
|
172
|
-
"template": "Processing complete: {count} items processed"
|
|
173
|
-
},
|
|
174
|
-
"onFailure": {
|
|
175
|
-
"enabled": true,
|
|
176
|
-
"recipients": ["{email}"],
|
|
177
|
-
"template": "Processing failed: {error}"
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
# Demo Scenarios
|
|
2
|
-
|
|
3
|
-
Pre-built demo data scenarios for reliable AI Employee demonstrations.
|
|
4
|
-
|
|
5
|
-
## Available Scenarios
|
|
6
|
-
|
|
7
|
-
| Scenario | Use Case | Persona Types |
|
|
8
|
-
|----------|----------|---------------|
|
|
9
|
-
| `sales-sdr` | Sales Development Representative | Voice, Chat |
|
|
10
|
-
| `support-tier1` | Customer Support Tier 1 | Voice, Chat |
|
|
11
|
-
| `hr-assistant` | HR Policy & Benefits Assistant | Chat, Voice |
|
|
12
|
-
|
|
13
|
-
## Usage
|
|
14
|
-
|
|
15
|
-
Generate a demo kit:
|
|
16
|
-
|
|
17
|
-
```
|
|
18
|
-
demo(mode="kit", persona_id="...", scenario="sales-sdr")
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
Validate demo readiness:
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
demo(mode="validate_kit", persona_id="...")
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## What's Generated
|
|
28
|
-
|
|
29
|
-
Each demo kit includes:
|
|
30
|
-
|
|
31
|
-
1. **KB Documents** - Markdown files for the knowledge base with demo-ready data
|
|
32
|
-
2. **Demo Script** - Questions to ask with expected answers
|
|
33
|
-
3. **Fixed Response Fallbacks** - Workflow nodes for guaranteed responses
|
|
34
|
-
4. **Validation Queries** - Test queries to verify before the demo
|
|
35
|
-
|
|
36
|
-
## Customization
|
|
37
|
-
|
|
38
|
-
Add custom Q&A pairs:
|
|
39
|
-
|
|
40
|
-
```
|
|
41
|
-
demo(mode="kit", persona_id="...", scenario="sales-sdr", custom_qa=[
|
|
42
|
-
{"question": "Tell me about feature X", "answer": "Feature X does..."}
|
|
43
|
-
])
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
## Creating Custom Scenarios
|
|
47
|
-
|
|
48
|
-
Create a JSON file in this directory with the following structure:
|
|
49
|
-
|
|
50
|
-
```json
|
|
51
|
-
{
|
|
52
|
-
"id": "my-scenario",
|
|
53
|
-
"name": "My Custom Scenario",
|
|
54
|
-
"description": "Description",
|
|
55
|
-
"persona_types": ["voice", "chat"],
|
|
56
|
-
"tags": ["tag1", "tag2"],
|
|
57
|
-
"intents": [...],
|
|
58
|
-
"entities": [...],
|
|
59
|
-
"qa_pairs": [...]
|
|
60
|
-
}
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
See existing scenarios for complete examples.
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
# Test Published Package: @ema.co/mcp-toolkit
|
|
2
|
-
|
|
3
|
-
Use this prompt to verify the published npm package works correctly.
|
|
4
|
-
|
|
5
|
-
## Quick Test (Copy & Run)
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
# Create temp directory
|
|
9
|
-
cd /tmp && rm -rf mcp-test && mkdir mcp-test && cd mcp-test
|
|
10
|
-
|
|
11
|
-
# Initialize and install
|
|
12
|
-
npm init -y && npm install @ema.co/mcp-toolkit@latest
|
|
13
|
-
|
|
14
|
-
# Create test file
|
|
15
|
-
cat > test.mjs << 'EOF'
|
|
16
|
-
import * as sdk from '@ema.co/mcp-toolkit/sdk';
|
|
17
|
-
|
|
18
|
-
console.log('=== @ema.co/mcp-toolkit Test Suite ===\n');
|
|
19
|
-
|
|
20
|
-
// 1. Version check
|
|
21
|
-
const pkg = await import('@ema.co/mcp-toolkit/sdk');
|
|
22
|
-
console.log(`SDK exports: ${Object.keys(pkg).length} items\n`);
|
|
23
|
-
|
|
24
|
-
// 2. Core classes
|
|
25
|
-
console.log('Core Classes:');
|
|
26
|
-
console.log(` EmaClient: ${typeof sdk.EmaClient === 'function' ? '✅' : '❌'}`);
|
|
27
|
-
console.log(` APISchemaRegistry: ${typeof sdk.APISchemaRegistry === 'function' ? '✅' : '❌'}`);
|
|
28
|
-
console.log(` StateStore: ${typeof sdk.StateStore === 'function' ? '✅' : '❌'}`);
|
|
29
|
-
|
|
30
|
-
// 3. Workflow generation
|
|
31
|
-
console.log('\nWorkflow Generation:');
|
|
32
|
-
console.log(` parseNaturalLanguage: ${typeof sdk.parseNaturalLanguage === 'function' ? '✅' : '❌'}`);
|
|
33
|
-
console.log(` needsLLMGeneration: ${typeof sdk.needsLLMGeneration === 'function' ? '✅' : '❌'}`);
|
|
34
|
-
console.log(` generateWorkflow: ${typeof sdk.generateWorkflow === 'function' ? '✅' : '❌'}`);
|
|
35
|
-
|
|
36
|
-
// 4. Validation
|
|
37
|
-
console.log('\nValidation:');
|
|
38
|
-
console.log(` validateWorkflowSpec: ${typeof sdk.validateWorkflowSpec === 'function' ? '✅' : '❌'}`);
|
|
39
|
-
|
|
40
|
-
// 5. Functional test
|
|
41
|
-
console.log('\nFunctional Test:');
|
|
42
|
-
const intent = sdk.parseNaturalLanguage('Customer support bot that searches knowledge base and sends emails');
|
|
43
|
-
console.log(` Parse intent: ${intent.intents?.length > 0 ? '✅' : '❌'}`);
|
|
44
|
-
console.log(` Intents found: ${JSON.stringify(intent.intents?.map(i => i.name))}`);
|
|
45
|
-
|
|
46
|
-
const needsLLM = sdk.needsLLMGeneration(intent);
|
|
47
|
-
console.log(` Needs LLM generation: ${needsLLM}`);
|
|
48
|
-
|
|
49
|
-
if (needsLLM) {
|
|
50
|
-
const result = sdk.generateWorkflow(intent, [], []);
|
|
51
|
-
console.log(` LLM prompt generated: ${result.llm_prompt ? '✅' : '❌'}`);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
console.log('\n=== Test Complete ===');
|
|
55
|
-
EOF
|
|
56
|
-
|
|
57
|
-
# Run test
|
|
58
|
-
node test.mjs
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
## Expected Output
|
|
62
|
-
|
|
63
|
-
```
|
|
64
|
-
=== @ema.co/mcp-toolkit Test Suite ===
|
|
65
|
-
|
|
66
|
-
SDK exports: 119+ items
|
|
67
|
-
|
|
68
|
-
Core Classes:
|
|
69
|
-
EmaClient: ✅
|
|
70
|
-
APISchemaRegistry: ✅
|
|
71
|
-
StateStore: ✅
|
|
72
|
-
|
|
73
|
-
Workflow Generation:
|
|
74
|
-
parseNaturalLanguage: ✅
|
|
75
|
-
needsLLMGeneration: ✅
|
|
76
|
-
generateWorkflow: ✅
|
|
77
|
-
|
|
78
|
-
Validation:
|
|
79
|
-
validateWorkflowSpec: ✅
|
|
80
|
-
|
|
81
|
-
Functional Test:
|
|
82
|
-
Parse intent: ✅
|
|
83
|
-
Intents found: ["Customer Support","Email Automation"]
|
|
84
|
-
Needs LLM generation: true
|
|
85
|
-
LLM prompt generated: ✅
|
|
86
|
-
|
|
87
|
-
=== Test Complete ===
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
## Import Paths
|
|
91
|
-
|
|
92
|
-
| Path | Contents |
|
|
93
|
-
|------|----------|
|
|
94
|
-
| `@ema.co/mcp-toolkit/sdk` | SDK classes and functions |
|
|
95
|
-
| `@ema.co/mcp-toolkit/mcp` | MCP server components |
|
|
96
|
-
| `@ema.co/mcp-toolkit` | CLI entry point (not for programmatic use) |
|
|
97
|
-
|
|
98
|
-
## MCP Server Test
|
|
99
|
-
|
|
100
|
-
To test the MCP server:
|
|
101
|
-
|
|
102
|
-
```bash
|
|
103
|
-
# Start MCP server (requires EMA_API_TOKEN)
|
|
104
|
-
export EMA_API_TOKEN="your-token"
|
|
105
|
-
export EMA_TENANT_ID="your-tenant"
|
|
106
|
-
npx -y @ema.co/mcp-toolkit@latest
|
|
107
|
-
|
|
108
|
-
# Or with npx directly
|
|
109
|
-
EMA_API_TOKEN="..." EMA_TENANT_ID="..." npx -y @ema.co/mcp-toolkit@latest
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
## Version Check
|
|
113
|
-
|
|
114
|
-
```bash
|
|
115
|
-
npm view @ema.co/mcp-toolkit version
|
|
116
|
-
```
|