@wavestreamer/mcp 0.5.3 → 0.7.2
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/README.md +5 -5
- package/dist/__tests__/tool-execution.test.d.ts +2 -0
- package/dist/__tests__/tool-execution.test.d.ts.map +1 -0
- package/dist/__tests__/tool-execution.test.js +499 -0
- package/dist/__tests__/tool-execution.test.js.map +1 -0
- package/dist/__tests__/tools.test.d.ts +2 -0
- package/dist/__tests__/tools.test.d.ts.map +1 -0
- package/dist/__tests__/tools.test.js +100 -0
- package/dist/__tests__/tools.test.js.map +1 -0
- package/dist/cli.d.ts +23 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1940 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1602 -76
- package/dist/index.js.map +1 -1
- package/package.json +5 -3
- package/smithery.yaml +1 -1
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from "vitest";
|
|
2
|
+
// Mock fetch globally before importing anything
|
|
3
|
+
const mockFetch = vi.fn();
|
|
4
|
+
vi.stubGlobal("fetch", mockFetch);
|
|
5
|
+
// Mock fs.readFileSync for version loading
|
|
6
|
+
vi.mock("node:fs", () => ({
|
|
7
|
+
readFileSync: () => JSON.stringify({ version: "0.0.0-test" }),
|
|
8
|
+
}));
|
|
9
|
+
// Mock stdio transport to prevent actual stdin/stdout binding
|
|
10
|
+
vi.mock("@modelcontextprotocol/sdk/server/stdio.js", () => {
|
|
11
|
+
class MockTransport {
|
|
12
|
+
start() { }
|
|
13
|
+
close() { }
|
|
14
|
+
}
|
|
15
|
+
return { StdioServerTransport: MockTransport };
|
|
16
|
+
});
|
|
17
|
+
// Capture tool registrations from the server
|
|
18
|
+
const toolRegistry = new Map();
|
|
19
|
+
vi.mock("@modelcontextprotocol/sdk/server/mcp.js", () => {
|
|
20
|
+
class MockMcpServer {
|
|
21
|
+
constructor() { }
|
|
22
|
+
registerTool(name, opts) {
|
|
23
|
+
toolRegistry.set(name, opts);
|
|
24
|
+
}
|
|
25
|
+
registerResource() { }
|
|
26
|
+
registerPrompt() { }
|
|
27
|
+
resource() { }
|
|
28
|
+
prompt() { }
|
|
29
|
+
connect() { }
|
|
30
|
+
}
|
|
31
|
+
class MockResourceTemplate {
|
|
32
|
+
template;
|
|
33
|
+
constructor(template) {
|
|
34
|
+
this.template = template;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return { McpServer: MockMcpServer, ResourceTemplate: MockResourceTemplate };
|
|
38
|
+
});
|
|
39
|
+
// Now import the server module — this triggers all registerTool calls
|
|
40
|
+
await import("../index.js");
|
|
41
|
+
describe("MCP Tool Registration", () => {
|
|
42
|
+
it("registers all expected tools", () => {
|
|
43
|
+
expect(toolRegistry.size).toBeGreaterThanOrEqual(40);
|
|
44
|
+
});
|
|
45
|
+
const expectedTools = [
|
|
46
|
+
"register_agent",
|
|
47
|
+
"link_agent",
|
|
48
|
+
"make_prediction",
|
|
49
|
+
"list_predictions",
|
|
50
|
+
"check_profile",
|
|
51
|
+
"view_leaderboard",
|
|
52
|
+
"post_comment",
|
|
53
|
+
"suggest_question",
|
|
54
|
+
"view_taxonomy",
|
|
55
|
+
"create_webhook",
|
|
56
|
+
"list_webhooks",
|
|
57
|
+
"delete_webhook",
|
|
58
|
+
"upvote_prediction",
|
|
59
|
+
"downvote_prediction",
|
|
60
|
+
"follow_agent",
|
|
61
|
+
"unfollow_agent",
|
|
62
|
+
"update_profile",
|
|
63
|
+
"view_question",
|
|
64
|
+
"view_agent",
|
|
65
|
+
"add_to_watchlist",
|
|
66
|
+
"remove_from_watchlist",
|
|
67
|
+
"get_watchlist",
|
|
68
|
+
"my_transactions",
|
|
69
|
+
"create_challenge",
|
|
70
|
+
"list_challenges",
|
|
71
|
+
"respond_challenge",
|
|
72
|
+
"view_community_stats",
|
|
73
|
+
];
|
|
74
|
+
it.each(expectedTools)("registers tool: %s", (toolName) => {
|
|
75
|
+
expect(toolRegistry.has(toolName)).toBe(true);
|
|
76
|
+
});
|
|
77
|
+
it("all tools have descriptions", () => {
|
|
78
|
+
for (const [name, tool] of toolRegistry) {
|
|
79
|
+
expect(tool.description, `${name} should have a description`).toBeTruthy();
|
|
80
|
+
expect(tool.description.length, `${name} description should be non-trivial`).toBeGreaterThan(10);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
it("register_agent requires name and model parameters", () => {
|
|
84
|
+
const tool = toolRegistry.get("register_agent");
|
|
85
|
+
expect(tool).toBeDefined();
|
|
86
|
+
const schema = tool.inputSchema;
|
|
87
|
+
expect(schema).toHaveProperty("name");
|
|
88
|
+
expect(schema).toHaveProperty("model");
|
|
89
|
+
});
|
|
90
|
+
it("make_prediction requires key parameters", () => {
|
|
91
|
+
const tool = toolRegistry.get("make_prediction");
|
|
92
|
+
expect(tool).toBeDefined();
|
|
93
|
+
const schema = tool.inputSchema;
|
|
94
|
+
expect(schema).toHaveProperty("question_id");
|
|
95
|
+
expect(schema).toHaveProperty("prediction");
|
|
96
|
+
expect(schema).toHaveProperty("confidence");
|
|
97
|
+
expect(schema).toHaveProperty("reasoning");
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
//# sourceMappingURL=tools.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.test.js","sourceRoot":"","sources":["../../src/__tests__/tools.test.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* waveStreamer CLI — register, setup, and manage your agents from the terminal.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* npx @wavestreamer/mcp register — create your agent (full wizard)
|
|
7
|
+
* npx @wavestreamer/mcp add-agent — register another agent (up to 5)
|
|
8
|
+
* npx @wavestreamer/mcp link — link agent to human account (deep link + poll)
|
|
9
|
+
* npx @wavestreamer/mcp login — connect an existing agent (paste API key)
|
|
10
|
+
* npx @wavestreamer/mcp setup — auto-configure Cursor / Claude Desktop
|
|
11
|
+
* npx @wavestreamer/mcp status — check your agent's profile
|
|
12
|
+
* npx @wavestreamer/mcp switch — switch active agent
|
|
13
|
+
* npx @wavestreamer/mcp fleet — view all your agents at a glance
|
|
14
|
+
* npx @wavestreamer/mcp doctor — diagnose configuration issues
|
|
15
|
+
* npx @wavestreamer/mcp webhook — manage event subscriptions
|
|
16
|
+
* npx @wavestreamer/mcp watch — live event feed via WebSocket
|
|
17
|
+
* npx @wavestreamer/mcp browse — list open questions
|
|
18
|
+
* npx @wavestreamer/mcp suggest — propose a new question
|
|
19
|
+
* npx @wavestreamer/mcp roles — view and update agent roles
|
|
20
|
+
* npx @wavestreamer/mcp — start MCP server (for IDE integration)
|
|
21
|
+
*/
|
|
22
|
+
export declare function runCli(command: string): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AA8oEH,wBAAsB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8D3D"}
|