@thupham/volley-mcp 1.0.1

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.
Files changed (61) hide show
  1. package/dist/collections.d.ts +50 -0
  2. package/dist/collections.js +125 -0
  3. package/dist/collections.js.map +1 -0
  4. package/dist/curl.d.ts +14 -0
  5. package/dist/curl.js +90 -0
  6. package/dist/curl.js.map +1 -0
  7. package/dist/format.d.ts +10 -0
  8. package/dist/format.js +70 -0
  9. package/dist/format.js.map +1 -0
  10. package/dist/importers.d.ts +75 -0
  11. package/dist/importers.js +164 -0
  12. package/dist/importers.js.map +1 -0
  13. package/dist/index.d.ts +2 -0
  14. package/dist/index.js +40 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/junit.d.ts +5 -0
  17. package/dist/junit.js +30 -0
  18. package/dist/junit.js.map +1 -0
  19. package/dist/native.d.ts +56 -0
  20. package/dist/native.js +44 -0
  21. package/dist/native.js.map +1 -0
  22. package/dist/session.d.ts +52 -0
  23. package/dist/session.js +135 -0
  24. package/dist/session.js.map +1 -0
  25. package/dist/tools/collections.d.ts +3 -0
  26. package/dist/tools/collections.js +50 -0
  27. package/dist/tools/collections.js.map +1 -0
  28. package/dist/tools/env.d.ts +3 -0
  29. package/dist/tools/env.js +33 -0
  30. package/dist/tools/env.js.map +1 -0
  31. package/dist/tools/graphql.d.ts +3 -0
  32. package/dist/tools/graphql.js +44 -0
  33. package/dist/tools/graphql.js.map +1 -0
  34. package/dist/tools/importCurl.d.ts +3 -0
  35. package/dist/tools/importCurl.js +36 -0
  36. package/dist/tools/importCurl.js.map +1 -0
  37. package/dist/tools/importers.d.ts +2 -0
  38. package/dist/tools/importers.js +62 -0
  39. package/dist/tools/importers.js.map +1 -0
  40. package/dist/tools/inspect.d.ts +3 -0
  41. package/dist/tools/inspect.js +102 -0
  42. package/dist/tools/inspect.js.map +1 -0
  43. package/dist/tools/ping.d.ts +6 -0
  44. package/dist/tools/ping.js +29 -0
  45. package/dist/tools/ping.js.map +1 -0
  46. package/dist/tools/policy.d.ts +3 -0
  47. package/dist/tools/policy.js +28 -0
  48. package/dist/tools/policy.js.map +1 -0
  49. package/dist/tools/request.d.ts +3 -0
  50. package/dist/tools/request.js +111 -0
  51. package/dist/tools/request.js.map +1 -0
  52. package/dist/tools/save.d.ts +3 -0
  53. package/dist/tools/save.js +67 -0
  54. package/dist/tools/save.js.map +1 -0
  55. package/dist/tools/stream.d.ts +3 -0
  56. package/dist/tools/stream.js +76 -0
  57. package/dist/tools/stream.js.map +1 -0
  58. package/dist/tools/ws.d.ts +3 -0
  59. package/dist/tools/ws.js +68 -0
  60. package/dist/tools/ws.js.map +1 -0
  61. package/package.json +38 -0
@@ -0,0 +1,68 @@
1
+ import { z } from "zod";
2
+ import { wsOpen, wsSend, wsRecv, wsClose } from "../native.js";
3
+ function textResult(session, obj) {
4
+ return { content: [{ type: "text", text: JSON.stringify(session.redact(obj), null, 2) }] };
5
+ }
6
+ export function registerWsTools(server, session) {
7
+ server.registerTool("ws_open", {
8
+ title: "Open persistent WebSocket",
9
+ description: "Open long-lived WS, return handle. Use ws_send/ws_recv/ws_close to interact.",
10
+ inputSchema: {
11
+ url: z.string().describe("ws:// or wss:// URL. May contain {{variables}}."),
12
+ headers: z.record(z.string(), z.any()).optional(),
13
+ subprotocols: z.array(z.string()).optional(),
14
+ send: z
15
+ .array(z.object({ json: z.any().optional(), text: z.string().optional() }))
16
+ .optional()
17
+ .describe("Messages to send immediately after connecting."),
18
+ env: z.string().optional(),
19
+ },
20
+ }, async (args) => {
21
+ const spec = { ...args, vars: session.mergedVars(args.env) };
22
+ const policy = session.checkPolicy(String(args.url ?? ""));
23
+ if (policy && "blocked" in policy) {
24
+ return textResult(session, { ok: false, connected: false, error: policy.error });
25
+ }
26
+ if (policy && "dryRun" in policy) {
27
+ return textResult(session, policy.result);
28
+ }
29
+ const result = await wsOpen(spec);
30
+ return textResult(session, result);
31
+ });
32
+ server.registerTool("ws_send", {
33
+ title: "Send WebSocket message",
34
+ description: "Send a single message on a persistent WebSocket connection opened with ws_open.",
35
+ inputSchema: {
36
+ handle: z.string().describe("Handle returned by ws_open."),
37
+ json: z.any().optional().describe("Send as a JSON message (mutually exclusive with text)."),
38
+ text: z.string().optional().describe("Send as a raw text message."),
39
+ },
40
+ }, async ({ handle, json, text }) => {
41
+ const message = json !== undefined ? { json } : { text };
42
+ const result = wsSend(handle, message);
43
+ return textResult(session, result);
44
+ });
45
+ server.registerTool("ws_recv", {
46
+ title: "Receive WebSocket frames",
47
+ description: "Drain buffered frames from persistent WS. Blocks up to maxDurationMs for first frame.",
48
+ inputSchema: {
49
+ handle: z.string().describe("Handle returned by ws_open."),
50
+ maxMessages: z.number().int().positive().optional().describe("Max frames to drain (default 50)."),
51
+ maxDurationMs: z.number().int().positive().optional().describe("Max wait for the first frame (default 1000ms)."),
52
+ },
53
+ }, async (args) => {
54
+ const result = await wsRecv(args);
55
+ return textResult(session, result);
56
+ });
57
+ server.registerTool("ws_close", {
58
+ title: "Close persistent WebSocket",
59
+ description: "Close a persistent WebSocket connection and release its handle.",
60
+ inputSchema: {
61
+ handle: z.string().describe("Handle returned by ws_open."),
62
+ },
63
+ }, async ({ handle }) => {
64
+ const result = wsClose(handle);
65
+ return textResult(session, result);
66
+ });
67
+ }
68
+ //# sourceMappingURL=ws.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws.js","sourceRoot":"","sources":["../../src/tools/ws.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@thupham/volley-mcp",
3
+ "version": "1.0.1",
4
+ "description": "MCP server for AI-agent-driven API testing (REST/GraphQL/WS/SSE/gRPC)",
5
+ "type": "module",
6
+ "bin": {
7
+ "volley-mcp": "dist/index.js"
8
+ },
9
+ "main": "dist/index.js",
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "dependencies": {
14
+ "@modelcontextprotocol/sdk": "^1.12.0",
15
+ "yaml": "^2.6.1",
16
+ "zod": "^3.23.8",
17
+ "@thupham/volley-core": "1.0.1"
18
+ },
19
+ "devDependencies": {
20
+ "@types/node": "^22.10.0",
21
+ "@types/ws": "^8.5.13",
22
+ "tsx": "^4.19.2",
23
+ "typescript": "^7.0.2",
24
+ "ws": "^8.18.0"
25
+ },
26
+ "engines": {
27
+ "node": ">=18"
28
+ },
29
+ "license": "MIT",
30
+ "publishConfig": {
31
+ "access": "public"
32
+ },
33
+ "scripts": {
34
+ "build": "tsc -p tsconfig.json",
35
+ "dev": "tsx src/index.ts",
36
+ "start": "node dist/index.js"
37
+ }
38
+ }