flarum-mcp-server 1.0.0

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 ADDED
@@ -0,0 +1,115 @@
1
+ # Flarum MCP Server
2
+
3
+ A [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server for [Flarum](https://flarum.org/) forums. This allows Claude Code and other MCP clients to interact with Flarum forums - creating, reading, updating, and deleting discussions, posts, users, and tags.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install -g flarum-mcp-server
9
+ ```
10
+
11
+ ## Configuration
12
+
13
+ Add to your Claude Code settings (`~/.claude/settings.json`):
14
+
15
+ ```json
16
+ {
17
+ "mcpServers": {
18
+ "flarum": {
19
+ "command": "flarum-mcp-server",
20
+ "env": {
21
+ "FLARUM_BASE_URL": "https://your-forum.com",
22
+ "FLARUM_USERNAME": "your-email@example.com",
23
+ "FLARUM_PASSWORD": "your-password"
24
+ }
25
+ }
26
+ }
27
+ }
28
+ ```
29
+
30
+ ### Environment Variables
31
+
32
+ | Variable | Required | Description |
33
+ |----------|----------|-------------|
34
+ | `FLARUM_BASE_URL` | Yes | Your Flarum forum URL |
35
+ | `FLARUM_USERNAME` | No | Email or username for auto-login |
36
+ | `FLARUM_PASSWORD` | No | Password for auto-login |
37
+
38
+ ## Available Tools
39
+
40
+ ### Discussions
41
+
42
+ | Tool | Description |
43
+ |------|-------------|
44
+ | `flarum_list_discussions` | List discussions (supports filtering by user, tag, date) |
45
+ | `flarum_get_discussion` | Get discussion details |
46
+ | `flarum_create_discussion` | Create a new discussion |
47
+ | `flarum_update_discussion` | Update a discussion |
48
+ | `flarum_delete_discussion` | Delete/hide a discussion |
49
+
50
+ ### Posts
51
+
52
+ | Tool | Description |
53
+ |------|-------------|
54
+ | `flarum_list_posts` | List posts in a discussion |
55
+ | `flarum_get_post` | Get post details |
56
+ | `flarum_create_post` | Create a reply |
57
+ | `flarum_update_post` | Update a post |
58
+ | `flarum_delete_post` | Delete/hide a post |
59
+
60
+ ### Users & Tags
61
+
62
+ | Tool | Description |
63
+ |------|-------------|
64
+ | `flarum_list_users` | List users (supports search) |
65
+ | `flarum_get_user` | Get user details |
66
+ | `flarum_list_tags` | List all tags |
67
+
68
+ ### Authentication
69
+
70
+ | Tool | Description |
71
+ |------|-------------|
72
+ | `flarum_login` | Login to the forum |
73
+ | `flarum_logout` | Logout |
74
+ | `flarum_check_auth` | Check authentication status |
75
+
76
+ ## Usage Examples
77
+
78
+ In Claude Code, you can say:
79
+
80
+ - "List the latest 10 discussions"
81
+ - "Create a new discussion titled 'Hello World' with content 'This is my first post'"
82
+ - "Reply to discussion 123 with 'Thanks for sharing!'"
83
+ - "Show me all discussions by user john"
84
+ - "Get discussions created after 2024-01-01"
85
+
86
+ ## Features
87
+
88
+ - **Auto-login**: Configure credentials in environment variables for automatic authentication
89
+ - **Token caching**: Tokens are cached locally (`~/.flarum-mcp-token.json`) with 5-year expiration
90
+ - **Filtering**: Filter discussions by user, tag, and date range
91
+ - **Soft delete**: Default delete operation hides content (recoverable), with option for permanent deletion
92
+
93
+ ## Requirements
94
+
95
+ - Node.js >= 18.0.0
96
+ - A Flarum forum with API access
97
+
98
+ ## Development
99
+
100
+ ```bash
101
+ # Clone and install dependencies
102
+ git clone https://github.com/wangxiaobo775/flarum-mcp-server.git
103
+ cd flarum-mcp-server
104
+ npm install
105
+
106
+ # Build
107
+ npm run build
108
+
109
+ # Watch mode
110
+ npm run dev
111
+ ```
112
+
113
+ ## License
114
+
115
+ MIT
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Flarum API 客户端
3
+ * 封装所有与 Flarum 论坛的 HTTP 交互
4
+ */
5
+ import type { LoginResult, Discussion, Post, Tag, User, ListParams, CreateDiscussionParams, UpdateDiscussionParams, CreatePostParams, UpdatePostParams } from "./types.js";
6
+ export declare class FlarumClient {
7
+ private baseUrl;
8
+ private token;
9
+ private userId;
10
+ private cacheFilePath;
11
+ constructor(baseUrl?: string);
12
+ /**
13
+ * 从文件加载缓存的 Token
14
+ */
15
+ loadCachedToken(): boolean;
16
+ /**
17
+ * 保存 Token 到文件
18
+ */
19
+ private saveCachedToken;
20
+ /**
21
+ * 清除缓存的 Token
22
+ */
23
+ clearCachedToken(): void;
24
+ /**
25
+ * 验证当前 Token 是否有效
26
+ */
27
+ validateToken(): Promise<boolean>;
28
+ /**
29
+ * 设置认证 Token
30
+ */
31
+ setToken(token: string, userId?: string): void;
32
+ /**
33
+ * 获取当前 Token
34
+ */
35
+ getToken(): string | null;
36
+ /**
37
+ * 检查是否已登录
38
+ */
39
+ isAuthenticated(): boolean;
40
+ /**
41
+ * 构建请求头
42
+ */
43
+ private getHeaders;
44
+ /**
45
+ * 发送 HTTP 请求
46
+ */
47
+ private request;
48
+ /**
49
+ * 登录获取 Token
50
+ */
51
+ login(identification: string, password: string, remember?: boolean): Promise<LoginResult>;
52
+ /**
53
+ * 登出
54
+ */
55
+ logout(): void;
56
+ /**
57
+ * 获取讨论列表
58
+ */
59
+ getDiscussions(params?: ListParams): Promise<Discussion[]>;
60
+ /**
61
+ * 获取单个讨论
62
+ */
63
+ getDiscussion(id: string): Promise<Discussion>;
64
+ /**
65
+ * 创建讨论
66
+ */
67
+ createDiscussion(params: CreateDiscussionParams): Promise<Discussion>;
68
+ /**
69
+ * 更新讨论
70
+ */
71
+ updateDiscussion(id: string, params: UpdateDiscussionParams): Promise<Discussion>;
72
+ /**
73
+ * 删除讨论
74
+ * @param id 讨论 ID
75
+ * @param permanent 是否永久删除(默认 false,使用软删除/隐藏)
76
+ */
77
+ deleteDiscussion(id: string, permanent?: boolean): Promise<void>;
78
+ /**
79
+ * 获取讨论的帖子列表
80
+ */
81
+ getPosts(discussionId: string, params?: ListParams): Promise<Post[]>;
82
+ /**
83
+ * 获取单个帖子
84
+ */
85
+ getPost(id: string): Promise<Post>;
86
+ /**
87
+ * 创建帖子(回复)
88
+ */
89
+ createPost(params: CreatePostParams): Promise<Post>;
90
+ /**
91
+ * 更新帖子
92
+ */
93
+ updatePost(id: string, params: UpdatePostParams): Promise<Post>;
94
+ /**
95
+ * 删除帖子
96
+ * @param id 帖子 ID
97
+ * @param permanent 是否永久删除(默认 false,使用软删除/隐藏)
98
+ */
99
+ deletePost(id: string, permanent?: boolean): Promise<void>;
100
+ /**
101
+ * 获取所有标签
102
+ */
103
+ getTags(): Promise<Tag[]>;
104
+ /**
105
+ * 获取用户列表
106
+ */
107
+ getUsers(params?: ListParams): Promise<User[]>;
108
+ /**
109
+ * 获取单个用户
110
+ */
111
+ getUser(id: string): Promise<User>;
112
+ /**
113
+ * 解析讨论数据
114
+ */
115
+ private parseDiscussions;
116
+ /**
117
+ * 解析帖子数据
118
+ */
119
+ private parsePosts;
120
+ /**
121
+ * 解析标签数据
122
+ */
123
+ private parseTags;
124
+ /**
125
+ * 解析用户数据
126
+ */
127
+ private parseUsers;
128
+ }
129
+ export declare const flarumClient: FlarumClient;
130
+ //# sourceMappingURL=flarum-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flarum-client.d.ts","sourceRoot":"","sources":["../src/flarum-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,IAAI,EACJ,GAAG,EACH,IAAI,EACJ,UAAU,EACV,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAOjB,MAAM,YAAY,CAAC;AAWpB,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,aAAa,CAAS;gBAElB,OAAO,CAAC,EAAE,MAAM;IAS5B;;OAEG;IACH,eAAe,IAAI,OAAO;IA8B1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAUxB;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAcvC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAO9C;;OAEG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACH,OAAO,CAAC,UAAU;IAalB;;OAEG;YACW,OAAO;IAsCrB;;OAEG;IACG,KAAK,CACT,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,OAAO,GACjB,OAAO,CAAC,WAAW,CAAC;IAkBvB;;OAEG;IACH,MAAM,IAAI,IAAI;IASd;;OAEG;IACG,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IA8DhE;;OAEG;IACG,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAapD;;OAEG;IACG,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC;IA+B3E;;OAEG;IACG,gBAAgB,CACpB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,UAAU,CAAC;IA+BtB;;;;OAIG;IACG,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB7E;;OAEG;IACG,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAqB1E;;OAEG;IACG,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAaxC;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BzD;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBrE;;;;OAIG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBvE;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAW/B;;OAEG;IACG,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAwBpD;;OAEG;IACG,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAexC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA0ExB;;OAEG;IACH,OAAO,CAAC,UAAU;IAgDlB;;OAEG;IACH,OAAO,CAAC,SAAS;IAWjB;;OAEG;IACH,OAAO,CAAC,UAAU;CAanB;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC"}