@miraigent/free-ai-ops-mcp 0.1.42 → 0.1.44

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 CHANGED
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.1.44] - 2026-07-20
4
+
5
+ ### Added
6
+
7
+ - Added a tools-list-only JSON-RPC session example and smoke-test coverage so
8
+ MCP client users can confirm the four public tools before sending any sample
9
+ tool-call input.
10
+
11
+ ## [0.1.43] - 2026-07-19
12
+
13
+ ### Changed
14
+
15
+ - Added a README command that extracts and parses the bundled JSON-RPC smoke-test
16
+ result without copy-pasting response lines, plus smoke-test coverage so the
17
+ public proof path stays visible for npm users.
18
+
3
19
  ## [0.1.42] - 2026-07-18
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
+ If you only want to confirm which tools the server exposes before sending any
23
+ sample tool-call input, use examples/tools-list-json-rpc-session/.
24
+
22
25
  If your first concern is whether a customer-facing prompt should be stopped
23
26
  before AI use, use examples/prompt-risk-json-rpc-session/ for a copy-ready
24
27
  prompt_risk_review session.
@@ -44,6 +47,13 @@ This is the fastest public proof path for npm and GitHub users. If the command
44
47
  starts but the returned status is confusing, open a Tried It feedback issue with
45
48
  the command, synthetic input shape, and returned status only.
46
49
 
50
+ To inspect the public tool list without running any tool call:
51
+
52
+ npx -y free-ai-ops-mcp@npm:@miraigent/free-ai-ops-mcp < examples/tools-list-json-rpc-session/sample-session.jsonl
53
+
54
+ That response should include `human_review_gate`, `faq_candidate_review`,
55
+ `ai_safe_crm_note`, and `prompt_risk_review`.
56
+
47
57
  For maintainers and contributors, `npm test` replays the same public
48
58
  `examples/mcp-json-rpc-session/sample-session.jsonl` file and checks the
49
59
  returned server name, version, tool count, and review-gate fields.
@@ -200,6 +210,15 @@ smoke-test output and inspect the wrapped text field with Node:
200
210
 
201
211
  node -e 'const r=JSON.parse(process.argv[1]); console.log(JSON.parse(r.result.content[0].text));' '<paste one response line here>'
202
212
 
213
+ To avoid copying any response text at all, run the bundled public sample and
214
+ parse only its final synthetic tool-call response:
215
+
216
+ npx -y free-ai-ops-mcp@npm:@miraigent/free-ai-ops-mcp < examples/mcp-json-rpc-session/sample-session.jsonl | tail -n 1 | node -e 'process.stdin.on("data", c => { const r = JSON.parse(c); console.log(JSON.parse(r.result.content[0].text).gateStatus); })'
217
+
218
+ That prints `stop` for the bundled support-reply example. If it does, the
219
+ package is returning the expected MCP result shape and you can debug client
220
+ configuration separately from tool behavior.
221
+
203
222
  Paste only the synthetic response from the public example. Do not paste private
204
223
  customer records or desktop client logs into shell history, screenshots, or
205
224
  GitHub issues.
@@ -0,0 +1,31 @@
1
+ # Tools List JSON-RPC Session Example
2
+
3
+ This example lets MCP client users confirm the public tool list before sending
4
+ any sample tool-call input.
5
+
6
+ Use it when a desktop MCP client starts the server but does not show the tools
7
+ you expected.
8
+
9
+ ## Run
10
+
11
+ From the repository root:
12
+
13
+ npm run mcp < examples/tools-list-json-rpc-session/sample-session.jsonl
14
+
15
+ From the public npm package:
16
+
17
+ npx -y free-ai-ops-mcp@npm:@miraigent/free-ai-ops-mcp < examples/tools-list-json-rpc-session/sample-session.jsonl
18
+
19
+ You should receive two JSON-RPC response lines. The second response should list:
20
+
21
+ - human_review_gate
22
+ - faq_candidate_review
23
+ - ai_safe_crm_note
24
+ - prompt_risk_review
25
+
26
+ If those tools appear in the terminal but not in your desktop MCP client,
27
+ restart the client and re-check the configured command and args before changing
28
+ private workflow data.
29
+
30
+ Do not include secrets, credentials, private customer records, internal policy
31
+ text, paid product files, or private memory behavior in public issues.
@@ -0,0 +1,2 @@
1
+ {"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}
2
+ {"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@miraigent/free-ai-ops-mcp",
3
- "version": "0.1.42",
3
+ "version": "0.1.44",
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",
@@ -3,6 +3,7 @@ import assert from 'node:assert';
3
3
  import { readFile } from 'node:fs/promises';
4
4
 
5
5
  const packageJson = JSON.parse(await readFile(new URL('../package.json', import.meta.url), 'utf8'));
6
+ const rootReadme = await readFile(new URL('../README.md', import.meta.url), 'utf8');
6
7
 
7
8
  const helpChild = spawn(process.execPath, ['mcp/free-ai-ops-server.mjs', '--help'], {
8
9
  stdio: ['ignore', 'pipe', 'inherit']
@@ -27,6 +28,8 @@ assert.match(helpStdout, /human_review_gate/);
27
28
  assert.match(helpStdout, /Do not paste secrets/);
28
29
  assert.match(helpStdout, /private memory behavior/);
29
30
  assert.match(helpStdout, /github\.com\/Miraigent\/miraigent-free-ai-ops-mcp\/issues\/new\/choose/);
31
+ assert.match(rootReadme, /tail -n 1 \| node -e/);
32
+ assert.match(rootReadme, /console\.log\(JSON\.parse\(r\.result\.content\[0\]\.text\)\.gateStatus\)/);
30
33
 
31
34
  const requests = [
32
35
  { jsonrpc: '2.0', id: 1, method: 'initialize', params: {} },
@@ -187,6 +190,21 @@ assert.equal(sampleToolResult.gateStatus, 'stop');
187
190
  assert.equal(sampleToolResult.nextLogRow.gate_status, 'stop');
188
191
  assert.equal(sampleToolResult.boundary, 'This tool is a review helper. It does not send messages.');
189
192
 
193
+ const toolsListSession = await readFile(
194
+ new URL('../examples/tools-list-json-rpc-session/sample-session.jsonl', import.meta.url),
195
+ 'utf8'
196
+ );
197
+ const toolsListResponses = await runServerWithRequests(toolsListSession.trim().split('\n'));
198
+ assert.equal(toolsListResponses.length, 2);
199
+ assert.equal(toolsListResponses[0].result.protocolVersion, '2024-11-05');
200
+ assert.equal(toolsListResponses[0].result.serverInfo.name, 'miraigent-free-ai-ops-mcp');
201
+ assert.equal(toolsListResponses[0].result.serverInfo.version, packageJson.version);
202
+ assert.deepEqual(
203
+ toolsListResponses[1].result.tools.map((tool) => tool.name),
204
+ ['human_review_gate', 'faq_candidate_review', 'ai_safe_crm_note', 'prompt_risk_review']
205
+ );
206
+ assert.match(rootReadme, /examples\/tools-list-json-rpc-session\/sample-session\.jsonl/);
207
+
190
208
  const promptRiskSession = await readFile(
191
209
  new URL('../examples/prompt-risk-json-rpc-session/sample-session.jsonl', import.meta.url),
192
210
  'utf8'