@prmichaelsen/reddit-mcp 0.1.0 → 0.1.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.
- package/.claude/settings.local.json +4 -1
- package/README.md +253 -27
- package/agent/progress.yaml +29 -30
- package/dist/factory.js +1206 -0
- package/dist/factory.js.map +4 -4
- package/dist/index.js +1206 -0
- package/dist/index.js.map +4 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +1206 -0
- package/dist/server.js.map +4 -4
- package/dist/tools/account.d.ts +4 -0
- package/dist/tools/account.d.ts.map +1 -0
- package/dist/tools/comments.d.ts +4 -0
- package/dist/tools/comments.d.ts.map +1 -0
- package/dist/tools/flair.d.ts +4 -0
- package/dist/tools/flair.d.ts.map +1 -0
- package/dist/tools/messages.d.ts +4 -0
- package/dist/tools/messages.d.ts.map +1 -0
- package/dist/tools/moderation.d.ts +4 -0
- package/dist/tools/moderation.d.ts.map +1 -0
- package/dist/tools/multireddits.d.ts +4 -0
- package/dist/tools/multireddits.d.ts.map +1 -0
- package/dist/tools/posts.d.ts +4 -0
- package/dist/tools/posts.d.ts.map +1 -0
- package/dist/tools/subreddits.d.ts +4 -0
- package/dist/tools/subreddits.d.ts.map +1 -0
- package/dist/tools/users.d.ts +4 -0
- package/dist/tools/users.d.ts.map +1 -0
- package/dist/tools/voting.d.ts +4 -0
- package/dist/tools/voting.d.ts.map +1 -0
- package/dist/tools/wiki.d.ts +4 -0
- package/dist/tools/wiki.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/server.ts +22 -0
- package/src/tools/account.ts +84 -0
- package/src/tools/comments.ts +73 -0
- package/src/tools/flair.ts +79 -0
- package/src/tools/messages.ts +126 -0
- package/src/tools/moderation.ts +292 -0
- package/src/tools/multireddits.ts +152 -0
- package/src/tools/posts.ts +177 -0
- package/src/tools/subreddits.ts +137 -0
- package/src/tools/users.ts +181 -0
- package/src/tools/voting.ts +90 -0
- package/src/tools/wiki.ts +118 -0
- package/tests/fixtures/reddit-responses.ts +159 -0
- package/tests/unit/account.test.ts +95 -0
- package/tests/unit/comments.test.ts +92 -0
- package/tests/unit/flair.test.ts +101 -0
- package/tests/unit/messages.test.ts +106 -0
- package/tests/unit/moderation.test.ts +243 -0
- package/tests/unit/multireddits.test.ts +136 -0
- package/tests/unit/posts.test.ts +155 -0
- package/tests/unit/subreddits.test.ts +125 -0
- package/tests/unit/transport.test.ts +13 -0
- package/tests/unit/users.test.ts +124 -0
- package/tests/unit/voting.test.ts +110 -0
- package/tests/unit/wiki.test.ts +116 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach } from "@jest/globals";
|
|
2
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
+
import { registerWikiTools } from "../../src/tools/wiki.js";
|
|
4
|
+
import { createMockClient } from "../helpers/mock-client.js";
|
|
5
|
+
import { mockEmptyResponse } from "../fixtures/reddit-responses.js";
|
|
6
|
+
|
|
7
|
+
const mockWikiPage = {
|
|
8
|
+
kind: "wikipage",
|
|
9
|
+
data: {
|
|
10
|
+
content_md: "# Welcome\n\nThis is the wiki page.",
|
|
11
|
+
content_html: "<h1>Welcome</h1><p>This is the wiki page.</p>",
|
|
12
|
+
revision_by: { data: { name: "mod1" } },
|
|
13
|
+
revision_date: 1710000000,
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const mockWikiPages = {
|
|
18
|
+
kind: "wikipagelisting",
|
|
19
|
+
data: ["index", "faq", "rules", "config/sidebar"],
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const mockWikiRevisions = {
|
|
23
|
+
kind: "Listing",
|
|
24
|
+
data: {
|
|
25
|
+
after: null,
|
|
26
|
+
children: [
|
|
27
|
+
{
|
|
28
|
+
id: "rev1",
|
|
29
|
+
author: { data: { name: "mod1" } },
|
|
30
|
+
page: "index",
|
|
31
|
+
reason: "Updated welcome page",
|
|
32
|
+
timestamp: 1710000000,
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
describe("Wiki Tools", () => {
|
|
39
|
+
let server: McpServer;
|
|
40
|
+
let mockClient: ReturnType<typeof createMockClient>;
|
|
41
|
+
|
|
42
|
+
beforeEach(() => {
|
|
43
|
+
server = new McpServer({ name: "test", version: "0.0.1" });
|
|
44
|
+
mockClient = createMockClient(
|
|
45
|
+
new Map([
|
|
46
|
+
["/r/test/wiki/index", mockWikiPage],
|
|
47
|
+
["/r/test/api/wiki/edit", mockEmptyResponse],
|
|
48
|
+
["/r/test/wiki/pages", mockWikiPages],
|
|
49
|
+
["/r/test/wiki/revisions", mockWikiRevisions],
|
|
50
|
+
["/r/test/wiki/revisions/index", mockWikiRevisions],
|
|
51
|
+
]),
|
|
52
|
+
);
|
|
53
|
+
registerWikiTools(server, mockClient);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it("registers wiki tools", () => {
|
|
57
|
+
expect(server).toBeDefined();
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
describe("reddit_wiki_page", () => {
|
|
61
|
+
it("calls GET /r/{subreddit}/wiki/{page}", async () => {
|
|
62
|
+
const result = await mockClient.get("/r/test/wiki/index");
|
|
63
|
+
expect(mockClient.mockGet).toHaveBeenCalledWith("/r/test/wiki/index");
|
|
64
|
+
expect(result).toEqual(mockWikiPage);
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
describe("reddit_wiki_edit", () => {
|
|
69
|
+
it("calls POST /r/{subreddit}/api/wiki/edit", async () => {
|
|
70
|
+
await mockClient.post("/r/test/api/wiki/edit", {
|
|
71
|
+
page: "index",
|
|
72
|
+
content: "# Updated Content",
|
|
73
|
+
reason: "Fixed typo",
|
|
74
|
+
});
|
|
75
|
+
expect(mockClient.mockPost).toHaveBeenCalledWith(
|
|
76
|
+
"/r/test/api/wiki/edit",
|
|
77
|
+
expect.objectContaining({
|
|
78
|
+
page: "index",
|
|
79
|
+
content: "# Updated Content",
|
|
80
|
+
reason: "Fixed typo",
|
|
81
|
+
}),
|
|
82
|
+
);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
describe("reddit_wiki_pages", () => {
|
|
87
|
+
it("calls GET /r/{subreddit}/wiki/pages", async () => {
|
|
88
|
+
const result = await mockClient.get("/r/test/wiki/pages");
|
|
89
|
+
expect(mockClient.mockGet).toHaveBeenCalledWith("/r/test/wiki/pages");
|
|
90
|
+
expect(result).toEqual(mockWikiPages);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
describe("reddit_wiki_revisions", () => {
|
|
95
|
+
it("calls GET /r/{subreddit}/wiki/revisions", async () => {
|
|
96
|
+
const result = await mockClient.get("/r/test/wiki/revisions", {
|
|
97
|
+
limit: "10",
|
|
98
|
+
});
|
|
99
|
+
expect(mockClient.mockGet).toHaveBeenCalledWith(
|
|
100
|
+
"/r/test/wiki/revisions",
|
|
101
|
+
{ limit: "10" },
|
|
102
|
+
);
|
|
103
|
+
expect(result).toEqual(mockWikiRevisions);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
describe("reddit_wiki_page_revisions", () => {
|
|
108
|
+
it("calls GET /r/{subreddit}/wiki/revisions/{page}", async () => {
|
|
109
|
+
const result = await mockClient.get("/r/test/wiki/revisions/index");
|
|
110
|
+
expect(mockClient.mockGet).toHaveBeenCalledWith(
|
|
111
|
+
"/r/test/wiki/revisions/index",
|
|
112
|
+
);
|
|
113
|
+
expect(result).toEqual(mockWikiRevisions);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
});
|