@miraigent/free-ai-ops-mcp 0.1.22 → 0.1.24
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/README.md +39 -0
- package/examples/mcp-json-rpc-session/README.md +8 -0
- package/mcp/free-ai-ops-server.mjs +1 -1
- package/package.json +1 -1
- package/scripts/smoke-test.mjs +37 -19
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.1.24] - 2026-06-25
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- Added smoke-test coverage for the public MCP JSON-RPC session example so npm
|
|
8
|
+
and GitHub users can trust that the copy-ready sample stays aligned with the
|
|
9
|
+
packaged server response fields.
|
|
10
|
+
|
|
11
|
+
## [0.1.23] - 2026-06-24
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- Added README guidance for reading returned MCP status fields so npm and
|
|
16
|
+
GitHub users can choose the next safe action before changing client config or
|
|
17
|
+
connecting private workflows.
|
|
18
|
+
|
|
3
19
|
## [0.1.22] - 2026-06-22
|
|
4
20
|
|
|
5
21
|
### Changed
|
package/README.md
CHANGED
|
@@ -19,6 +19,9 @@ examples/human-review-gate/.
|
|
|
19
19
|
For a complete public-safe MCP session that covers initialize, tools/list, and
|
|
20
20
|
one tool call, see examples/mcp-json-rpc-session/.
|
|
21
21
|
|
|
22
|
+
That JSON-RPC session is also covered by `npm test`, so the README proof path
|
|
23
|
+
and packaged example stay aligned when the MCP response shape changes.
|
|
24
|
+
|
|
22
25
|
## One-Command Public Smoke Test
|
|
23
26
|
|
|
24
27
|
Use this when you want to confirm the npm package works before editing a desktop
|
|
@@ -37,6 +40,10 @@ This is the fastest public proof path for npm and GitHub users. If the command
|
|
|
37
40
|
starts but the returned status is confusing, open a Tried It feedback issue with
|
|
38
41
|
the command, synthetic input shape, and returned status only.
|
|
39
42
|
|
|
43
|
+
For maintainers and contributors, `npm test` replays the same public
|
|
44
|
+
`examples/mcp-json-rpc-session/sample-session.jsonl` file and checks the
|
|
45
|
+
returned server name, version, tool count, and review-gate fields.
|
|
46
|
+
|
|
40
47
|
If you are checking the package from npm search, run the public help first:
|
|
41
48
|
|
|
42
49
|
npx -y free-ai-ops-mcp@npm:@miraigent/free-ai-ops-mcp --help
|
|
@@ -120,6 +127,38 @@ you ran, the public-safe input shape, and the returned status field. Do not
|
|
|
120
127
|
paste private customer records, secrets, internal policy text, or paid product
|
|
121
128
|
files.
|
|
122
129
|
|
|
130
|
+
## Read The Returned Status
|
|
131
|
+
|
|
132
|
+
After the smoke test runs, look for the status field from the tool you called
|
|
133
|
+
before changing client configuration or private workflows.
|
|
134
|
+
|
|
135
|
+
For `human_review_gate`:
|
|
136
|
+
|
|
137
|
+
- `auto_ok`: the synthetic draft looks low risk, but the tool still does not
|
|
138
|
+
send anything.
|
|
139
|
+
- `review_required`: keep a human reviewer in the workflow before sending.
|
|
140
|
+
- `stop`: pause the workflow and resolve the sensitive, payment, complaint,
|
|
141
|
+
privacy, public-facing, or policy issue first.
|
|
142
|
+
|
|
143
|
+
For `prompt_risk_review`:
|
|
144
|
+
|
|
145
|
+
- `review_checklist_required`: document the data-handling checklist before
|
|
146
|
+
running the prompt.
|
|
147
|
+
- `human_review_required`: add a human review step before AI output can affect a
|
|
148
|
+
customer-facing workflow.
|
|
149
|
+
- `stop_before_ai_use`: do not run the prompt until the data-handling rule is
|
|
150
|
+
reviewed.
|
|
151
|
+
|
|
152
|
+
For `faq_candidate_review`, use `recommendedStatus` to decide whether the
|
|
153
|
+
pattern belongs in a public FAQ, internal FAQ, or human-review rule. For
|
|
154
|
+
`ai_safe_crm_note`, check that facts, AI suggestions, human decisions, and next
|
|
155
|
+
actions stay in separate fields.
|
|
156
|
+
|
|
157
|
+
If the status is surprising, open a Tried It feedback issue with synthetic input
|
|
158
|
+
only. The most useful report says which status you expected, which status you
|
|
159
|
+
received, and what extra rule or explanation would have made the result easier
|
|
160
|
+
to use.
|
|
161
|
+
|
|
123
162
|
## Copy A Useful Feedback Result
|
|
124
163
|
|
|
125
164
|
When you open a Tried It feedback issue, the most useful report is the smallest
|
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
This example gives developers a copy-ready MCP session for the public
|
|
4
4
|
@miraigent/free-ai-ops-mcp package.
|
|
5
5
|
|
|
6
|
+
The sample JSONL file in this directory is part of the repository smoke test.
|
|
7
|
+
When `npm test` passes, this public copy-paste session has been replayed against
|
|
8
|
+
the local MCP server and checked for the expected response fields.
|
|
9
|
+
|
|
6
10
|
Use it before wiring the package into Claude Desktop, Cursor, or a custom MCP
|
|
7
11
|
client. It verifies that the server responds to:
|
|
8
12
|
|
|
@@ -40,6 +44,10 @@ If those fields appear in the terminal but not in Claude Desktop, Cursor, or
|
|
|
40
44
|
another client, the package is likely running and the next thing to check is the
|
|
41
45
|
client config, restart behavior, or command path.
|
|
42
46
|
|
|
47
|
+
Maintainers should update this sample and the smoke test together whenever a
|
|
48
|
+
response field or tool name changes. That keeps the GitHub example, npm package,
|
|
49
|
+
and README troubleshooting path from drifting apart.
|
|
50
|
+
|
|
43
51
|
## Public-Safe Feedback
|
|
44
52
|
|
|
45
53
|
If the output is unclear, open a Tried It feedback issue and include only:
|
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.24",
|
|
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
|
@@ -25,10 +25,6 @@ assert.match(helpStdout, /npx -y free-ai-ops-mcp@npm:@miraigent\/free-ai-ops-mcp
|
|
|
25
25
|
assert.match(helpStdout, /human_review_gate/);
|
|
26
26
|
assert.match(helpStdout, /Do not paste secrets/);
|
|
27
27
|
|
|
28
|
-
const child = spawn(process.execPath, ['mcp/free-ai-ops-server.mjs'], {
|
|
29
|
-
stdio: ['pipe', 'pipe', 'inherit']
|
|
30
|
-
});
|
|
31
|
-
|
|
32
28
|
const requests = [
|
|
33
29
|
{ jsonrpc: '2.0', id: 1, method: 'initialize', params: {} },
|
|
34
30
|
{ jsonrpc: '2.0', id: 2, method: 'tools/list', params: {} },
|
|
@@ -93,25 +89,33 @@ const requests = [
|
|
|
93
89
|
}
|
|
94
90
|
];
|
|
95
91
|
|
|
96
|
-
|
|
97
|
-
child.
|
|
98
|
-
|
|
99
|
-
});
|
|
92
|
+
async function runServerWithRequests(requestLines) {
|
|
93
|
+
const child = spawn(process.execPath, ['mcp/free-ai-ops-server.mjs'], {
|
|
94
|
+
stdio: ['pipe', 'pipe', 'inherit']
|
|
95
|
+
});
|
|
100
96
|
|
|
101
|
-
|
|
102
|
-
child.
|
|
103
|
-
|
|
104
|
-
|
|
97
|
+
let stdout = '';
|
|
98
|
+
child.stdout.on('data', (chunk) => {
|
|
99
|
+
stdout += chunk;
|
|
100
|
+
});
|
|
105
101
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
102
|
+
for (const requestLine of requestLines) {
|
|
103
|
+
child.stdin.write(requestLine + '\n');
|
|
104
|
+
}
|
|
105
|
+
child.stdin.end();
|
|
106
|
+
|
|
107
|
+
await new Promise((resolve, reject) => {
|
|
108
|
+
child.on('error', reject);
|
|
109
|
+
child.on('close', (code) => {
|
|
110
|
+
if (code !== 0) reject(new Error('server exited with ' + code));
|
|
111
|
+
else resolve();
|
|
112
|
+
});
|
|
111
113
|
});
|
|
112
|
-
});
|
|
113
114
|
|
|
114
|
-
|
|
115
|
+
return stdout.trim().split('\n').map((line) => JSON.parse(line));
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const responses = await runServerWithRequests(requests.map((request) => JSON.stringify(request)));
|
|
115
119
|
assert.equal(responses.length, requests.length);
|
|
116
120
|
assert.equal(responses[0].result.serverInfo.name, 'miraigent-free-ai-ops-mcp');
|
|
117
121
|
assert.equal(responses[0].result.serverInfo.version, packageJson.version);
|
|
@@ -121,3 +125,17 @@ assert.match(responses[2].result.content[0].text, /nextLogRow/);
|
|
|
121
125
|
assert.match(responses[3].result.content[0].text, /public_faq_candidate/);
|
|
122
126
|
assert.match(responses[4].result.content[0].text, /crmNote/);
|
|
123
127
|
assert.match(responses[5].result.content[0].text, /stop_before_ai_use|human_review_required/);
|
|
128
|
+
|
|
129
|
+
const sampleSession = await readFile(
|
|
130
|
+
new URL('../examples/mcp-json-rpc-session/sample-session.jsonl', import.meta.url),
|
|
131
|
+
'utf8'
|
|
132
|
+
);
|
|
133
|
+
const sampleLines = sampleSession.trim().split('\n');
|
|
134
|
+
const sampleResponses = await runServerWithRequests(sampleLines);
|
|
135
|
+
assert.equal(sampleResponses.length, 3);
|
|
136
|
+
assert.equal(sampleResponses[0].result.serverInfo.name, 'miraigent-free-ai-ops-mcp');
|
|
137
|
+
assert.equal(sampleResponses[0].result.serverInfo.version, packageJson.version);
|
|
138
|
+
assert.equal(sampleResponses[1].result.tools.length, 4);
|
|
139
|
+
assert.match(sampleResponses[2].result.content[0].text, /gateStatus/);
|
|
140
|
+
assert.match(sampleResponses[2].result.content[0].text, /reviewOwner/);
|
|
141
|
+
assert.match(sampleResponses[2].result.content[0].text, /boundary/);
|