@ema.co/mcp-toolkit 2026.1.25 → 2026.1.26-3

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.

Files changed (85) hide show
  1. package/README.md +10 -2
  2. package/dist/mcp/handlers/action/index.js +3 -18
  3. package/dist/mcp/handlers/data/index.js +385 -41
  4. package/dist/mcp/handlers/data/templates.js +107 -0
  5. package/dist/mcp/handlers/deprecation.js +50 -0
  6. package/dist/mcp/handlers/env/index.js +8 -4
  7. package/dist/mcp/handlers/knowledge/index.js +44 -237
  8. package/dist/mcp/handlers/persona/create.js +5 -11
  9. package/dist/mcp/handlers/persona/index.js +5 -1
  10. package/dist/mcp/handlers/persona/version.js +234 -0
  11. package/dist/mcp/handlers/sync/index.js +3 -18
  12. package/dist/mcp/handlers/template/index.js +75 -10
  13. package/dist/mcp/handlers/workflow/analyze.js +171 -0
  14. package/dist/mcp/handlers/workflow/compare.js +70 -0
  15. package/dist/mcp/handlers/workflow/compile.js +39 -0
  16. package/dist/mcp/handlers/workflow/deploy.js +73 -0
  17. package/dist/mcp/handlers/workflow/generate.js +350 -0
  18. package/dist/mcp/handlers/workflow/index.js +136 -0
  19. package/dist/mcp/handlers/workflow/modify.js +456 -0
  20. package/dist/mcp/handlers/workflow/optimize.js +136 -0
  21. package/dist/mcp/handlers/workflow/types.js +4 -0
  22. package/dist/mcp/handlers/workflow/utils.js +132 -0
  23. package/dist/mcp/handlers-consolidated.js +62 -2691
  24. package/dist/mcp/prompts.js +13 -14
  25. package/dist/mcp/resources.js +55 -54
  26. package/dist/mcp/server.js +93 -124
  27. package/dist/mcp/{tools-v2.js → tools.js} +1 -1
  28. package/dist/mcp/workflow-operations.js +2 -2
  29. package/dist/sdk/client-adapter.js +267 -32
  30. package/dist/sdk/client.js +31 -15
  31. package/dist/sdk/ema-client.js +183 -0
  32. package/dist/sdk/generated/template-fallbacks.js +123 -0
  33. package/dist/sdk/guidance.js +65 -11
  34. package/dist/sdk/index.js +3 -1
  35. package/dist/sdk/knowledge.js +16 -86
  36. package/dist/sdk/workflow-intent.js +27 -0
  37. package/dist/sdk/workflow-transformer.js +0 -342
  38. package/docs/DEBUG-ANALYSIS-unused-category-type-mismatch.md +481 -0
  39. package/docs/TODO-fix-analyzer-and-modify.md +182 -0
  40. package/package.json +9 -4
  41. package/dist/mcp/tools-consolidated.js +0 -875
  42. package/dist/mcp/tools-legacy.js +0 -736
  43. package/docs/CODEBASE-ANALYSIS-2026-01-23.md +0 -936
  44. package/docs/CODEBASE-ANALYSIS-PRIORITIZED.md +0 -774
  45. package/docs/api-contracts.md +0 -216
  46. package/docs/auto-builder-analysis.md +0 -271
  47. package/docs/blog/mcp-tool-design-lessons.md +0 -309
  48. package/docs/data-architecture.md +0 -166
  49. package/docs/demos/ap-invoice-generation.md +0 -347
  50. package/docs/demos/ap-invoice-processing.md +0 -271
  51. package/docs/ema-auto-builder-guide.html +0 -394
  52. package/docs/lessons-learned.md +0 -209
  53. package/docs/llm-native-workflow-design.md +0 -252
  54. package/docs/local-generation.md +0 -508
  55. package/docs/mcp-flow-diagram.md +0 -135
  56. package/docs/migration/action-composition-migration.md +0 -270
  57. package/docs/naming-conventions.md +0 -278
  58. package/docs/proposals/HANDOFF-tool-restructure.md +0 -526
  59. package/docs/proposals/action-composition.md +0 -490
  60. package/docs/proposals/explicit-method-restructure.md +0 -328
  61. package/docs/proposals/mcp-tool-restructure-2026-01.md +0 -366
  62. package/docs/proposals/self-contained-guidance.md +0 -427
  63. package/docs/proto-sdk-generation.md +0 -242
  64. package/docs/release-impact.md +0 -102
  65. package/docs/release-process.md +0 -157
  66. package/docs/staging.RULE.md +0 -142
  67. package/docs/test-persona-creation.md +0 -196
  68. package/docs/tool-consolidation-v2.md +0 -225
  69. package/docs/tool-response-standards.md +0 -256
  70. package/resources/demo-kits/README.md +0 -175
  71. package/resources/demo-kits/finance-ap/manifest.json +0 -150
  72. package/resources/demo-kits/tags.json +0 -91
  73. package/resources/docs/getting-started.md +0 -97
  74. package/resources/templates/auto-builder-rules.md +0 -224
  75. package/resources/templates/chat-ai/README.md +0 -119
  76. package/resources/templates/chat-ai/persona-config.json +0 -111
  77. package/resources/templates/dashboard-ai/README.md +0 -156
  78. package/resources/templates/dashboard-ai/persona-config.json +0 -180
  79. package/resources/templates/demo-scenarios/README.md +0 -63
  80. package/resources/templates/demo-scenarios/test-published-package.md +0 -116
  81. package/resources/templates/document-gen-ai/README.md +0 -132
  82. package/resources/templates/document-gen-ai/persona-config.json +0 -316
  83. package/resources/templates/voice-ai/README.md +0 -123
  84. package/resources/templates/voice-ai/persona-config.json +0 -74
  85. 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
- ```