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 +115 -0
- package/build/flarum-client.d.ts +130 -0
- package/build/flarum-client.d.ts.map +1 -0
- package/build/flarum-client.js +600 -0
- package/build/flarum-client.js.map +1 -0
- package/build/index.d.ts +13 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +70 -0
- package/build/index.js.map +1 -0
- package/build/tools/auth.d.ts +9 -0
- package/build/tools/auth.d.ts.map +1 -0
- package/build/tools/auth.js +82 -0
- package/build/tools/auth.js.map +1 -0
- package/build/tools/discussions.d.ts +9 -0
- package/build/tools/discussions.d.ts.map +1 -0
- package/build/tools/discussions.js +315 -0
- package/build/tools/discussions.js.map +1 -0
- package/build/tools/index.d.ts +9 -0
- package/build/tools/index.d.ts.map +1 -0
- package/build/tools/index.js +722 -0
- package/build/tools/index.js.map +1 -0
- package/build/tools/posts.d.ts +9 -0
- package/build/tools/posts.d.ts.map +1 -0
- package/build/tools/posts.js +259 -0
- package/build/tools/posts.js.map +1 -0
- package/build/types.d.ts +171 -0
- package/build/types.d.ts.map +1 -0
- package/build/types.js +5 -0
- package/build/types.js.map +1 -0
- package/package.json +48 -0
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"}
|