@miraigent/free-ai-ops-mcp 0.1.27 → 0.1.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/mcp/free-ai-ops-server.mjs +12 -5
- package/package.json +1 -1
- package/scripts/smoke-test.mjs +27 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.1.29] - 2026-07-02
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- Declared required MCP input fields for all four public tools so Claude
|
|
8
|
+
Desktop, Cursor, and custom MCP clients can render clearer tool forms from
|
|
9
|
+
`tools/list` before users connect private workflows.
|
|
10
|
+
|
|
11
|
+
## [0.1.28] - 2026-07-01
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
|
|
15
|
+
- Read the MCP initialize server version from `package.json` so npm releases,
|
|
16
|
+
README smoke checks, and desktop MCP clients cannot drift when the package
|
|
17
|
+
version changes.
|
|
18
|
+
|
|
3
19
|
## [0.1.27] - 2026-06-30
|
|
4
20
|
|
|
5
21
|
### Added
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
|
+
|
|
5
|
+
const packageJson = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
|
|
6
|
+
const serverInfo = { name: 'miraigent-free-ai-ops-mcp', version: packageJson.version };
|
|
4
7
|
|
|
5
8
|
const tools = [
|
|
6
9
|
{
|
|
@@ -14,7 +17,8 @@ const tools = [
|
|
|
14
17
|
riskFlags: { type: 'array', items: { type: 'string' } },
|
|
15
18
|
reviewOwner: { type: 'string' },
|
|
16
19
|
sendMode: { type: 'string' }
|
|
17
|
-
}
|
|
20
|
+
},
|
|
21
|
+
required: ['draftType', 'audience', 'riskFlags', 'reviewOwner', 'sendMode']
|
|
18
22
|
}
|
|
19
23
|
},
|
|
20
24
|
{
|
|
@@ -28,7 +32,8 @@ const tools = [
|
|
|
28
32
|
responseCost: { type: 'string' },
|
|
29
33
|
riskLevel: { type: 'string' },
|
|
30
34
|
currentAnswer: { type: 'string' }
|
|
31
|
-
}
|
|
35
|
+
},
|
|
36
|
+
required: ['inquiryPattern', 'frequency', 'responseCost', 'riskLevel']
|
|
32
37
|
}
|
|
33
38
|
},
|
|
34
39
|
{
|
|
@@ -42,7 +47,8 @@ const tools = [
|
|
|
42
47
|
containsPersonalData: { type: 'boolean' },
|
|
43
48
|
nextAction: { type: 'string' },
|
|
44
49
|
owner: { type: 'string' }
|
|
45
|
-
}
|
|
50
|
+
},
|
|
51
|
+
required: ['rawNoteSummary', 'channel', 'containsPersonalData', 'nextAction', 'owner']
|
|
46
52
|
}
|
|
47
53
|
},
|
|
48
54
|
{
|
|
@@ -56,7 +62,8 @@ const tools = [
|
|
|
56
62
|
dataTypes: { type: 'array', items: { type: 'string' } },
|
|
57
63
|
customerFacing: { type: 'boolean' },
|
|
58
64
|
riskLevel: { type: 'string' }
|
|
59
|
-
}
|
|
65
|
+
},
|
|
66
|
+
required: ['operation', 'promptSummary', 'dataTypes', 'customerFacing', 'riskLevel']
|
|
60
67
|
}
|
|
61
68
|
}
|
|
62
69
|
];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@miraigent/free-ai-ops-mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.29",
|
|
4
4
|
"description": "Free MCP server for developers adding human review gates, prompt risk checks, FAQ review, and CRM note safety to AI tools.",
|
|
5
5
|
"homepage": "https://github.com/Miraigent/miraigent-free-ai-ops-mcp",
|
|
6
6
|
"type": "module",
|
package/scripts/smoke-test.mjs
CHANGED
|
@@ -124,6 +124,33 @@ assert.deepEqual(
|
|
|
124
124
|
responses[1].result.tools.map((tool) => tool.name),
|
|
125
125
|
['human_review_gate', 'faq_candidate_review', 'ai_safe_crm_note', 'prompt_risk_review']
|
|
126
126
|
);
|
|
127
|
+
assert.deepEqual(responses[1].result.tools[0].inputSchema.required, [
|
|
128
|
+
'draftType',
|
|
129
|
+
'audience',
|
|
130
|
+
'riskFlags',
|
|
131
|
+
'reviewOwner',
|
|
132
|
+
'sendMode'
|
|
133
|
+
]);
|
|
134
|
+
assert.deepEqual(responses[1].result.tools[1].inputSchema.required, [
|
|
135
|
+
'inquiryPattern',
|
|
136
|
+
'frequency',
|
|
137
|
+
'responseCost',
|
|
138
|
+
'riskLevel'
|
|
139
|
+
]);
|
|
140
|
+
assert.deepEqual(responses[1].result.tools[2].inputSchema.required, [
|
|
141
|
+
'rawNoteSummary',
|
|
142
|
+
'channel',
|
|
143
|
+
'containsPersonalData',
|
|
144
|
+
'nextAction',
|
|
145
|
+
'owner'
|
|
146
|
+
]);
|
|
147
|
+
assert.deepEqual(responses[1].result.tools[3].inputSchema.required, [
|
|
148
|
+
'operation',
|
|
149
|
+
'promptSummary',
|
|
150
|
+
'dataTypes',
|
|
151
|
+
'customerFacing',
|
|
152
|
+
'riskLevel'
|
|
153
|
+
]);
|
|
127
154
|
assert.match(responses[2].result.content[0].text, /review_required|stop/);
|
|
128
155
|
assert.match(responses[2].result.content[0].text, /nextLogRow/);
|
|
129
156
|
assert.match(responses[3].result.content[0].text, /public_faq_candidate/);
|