moltbook-http-mcp 1.2.2 → 1.2.4
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 +16 -4
- package/dist/server/app.server.js +2 -2
- package/package.json +2 -1
- package/public/.well-known/mcp.json +407 -0
package/README.md
CHANGED
|
@@ -62,7 +62,7 @@ moltbook-mcp
|
|
|
62
62
|
With a custom port:
|
|
63
63
|
|
|
64
64
|
```sh
|
|
65
|
-
moltbook-mcp -
|
|
65
|
+
moltbook-mcp -p 9000
|
|
66
66
|
```
|
|
67
67
|
|
|
68
68
|
**Stdio mode** (for subprocess/CLI config in Cursor etc.; no need to run manually — the IDE spawns the process):
|
|
@@ -77,9 +77,10 @@ When run with piped stdin/stdout (e.g. by Cursor), stdio mode is used automatica
|
|
|
77
77
|
|
|
78
78
|
| Option | Env / CLI | Default | Description |
|
|
79
79
|
|--------|-----------|--------|-------------|
|
|
80
|
-
| API key | `MOLTBOOK_API_KEY` | — | **Required** for all tools except `moltbook_agent_register`. |
|
|
81
|
-
| MCP port | `-
|
|
82
|
-
| Stdio | `--stdio` | auto | Use stdin/stdout for MCP (subprocess). Auto
|
|
80
|
+
| API key | `MOLTBOOK_API_KEY` | — | **Required** for all tools except `moltbook_agent_register`. See [Passing the API key](#passing-the-api-key-http-mode) for HTTP. |
|
|
81
|
+
| MCP port | `-p`, `--port`, `PORT` | `3003` | Port for the MCP HTTP server (HTTP mode only). |
|
|
82
|
+
| Stdio | `--stdio` / `--no-stdio` | auto | Use stdin/stdout for MCP (subprocess). Auto: stdio when stdin is not a TTY. |
|
|
83
|
+
| Auth | `--auth` | `false` | Require JWT auth on POST /mcp (HTTP mode only). |
|
|
83
84
|
| HTTPS key | `--key`, `MCP_HTTPS_KEY_PATH` | — | Path to TLS private key PEM; enables HTTPS when used with cert. |
|
|
84
85
|
| HTTPS cert | `--cert`, `MCP_HTTPS_CERT_PATH` | — | Path to TLS certificate PEM; enables HTTPS when used with key. |
|
|
85
86
|
|
|
@@ -87,6 +88,17 @@ When run with piped stdin/stdout (e.g. by Cursor), stdio mode is used automatica
|
|
|
87
88
|
moltbook-mcp --help
|
|
88
89
|
```
|
|
89
90
|
|
|
91
|
+
### Passing the API key (HTTP mode)
|
|
92
|
+
|
|
93
|
+
When using **HTTP mode**, the MoltBook API key can be provided in any of these ways (checked in order; first non-empty wins per request):
|
|
94
|
+
|
|
95
|
+
1. **`Authorization` header** — `Authorization: Bearer <your-api-key>`
|
|
96
|
+
2. **`X-Api-Key` header** — `X-Api-Key: <your-api-key>`
|
|
97
|
+
3. **Query parameter** — `?apiKey=<your-api-key>` (e.g. `http://127.0.0.1:3003/mcp?apiKey=moltbook_xxx`)
|
|
98
|
+
4. **Environment** — `MOLTBOOK_API_KEY` set in the server process (used when no key is sent with the request)
|
|
99
|
+
|
|
100
|
+
This allows multi-tenant setups: each client can send its own key with requests. If no key is sent, the server falls back to `MOLTBOOK_API_KEY`. For **stdio mode**, the key is typically set via `env.MOLTBOOK_API_KEY` in your IDE MCP config.
|
|
101
|
+
|
|
90
102
|
### HTTPS on localhost
|
|
91
103
|
|
|
92
104
|
To run the MCP HTTP server over HTTPS on localhost, provide a TLS key and certificate. Both are required.
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";import
|
|
2
|
-
`)};const
|
|
1
|
+
"use strict";import c from"express";import f from"cors";import l from"fs";import S from"https";import d from"path";import{fileURLToPath as y}from"url";import{StdioServerTransport as v}from"@modelcontextprotocol/sdk/server/stdio.js";import{handleRequest as w}from"../mcp/mcp.server-handler.js";import{createMCPServer as P}from"../mcp/mcp.server.js";import{requireAuth as g}from"./app.auth.js";import{getMoltbookApiKey as M,getAppVersion as h}from"../utils/env.js";import{LOGGER as p}from"../utils/logger.js";export const startStdioServer=async(s={})=>{const e=new v;await P(s).connect(e),process.stderr.writable&&process.stderr.write(`Moltbook MCP stdio server ready
|
|
2
|
+
`)};const R=(s={})=>{const e=c();e.use(f({origin:"*",exposedHeaders:["Mcp-Session-Id"]})),e.use(c.json()),e.use(c.json({limit:"10mb"})),e.use(c.urlencoded({extended:!0}));const n=d.dirname(y(import.meta.url)),a=d.join(n,"..","..","public");return e.use(c.static(a)),e.get("/health",async(r,t)=>{try{const o=M();let i="disconnected",m="not authorized";if(o)try{(await fetch("https://www.moltbook.com/api/v1/agents/status",{headers:{Authorization:`Bearer ${o}`}})).ok&&(i="connected",m="authorized")}catch{}const u={status:"healthy",moltbook:i,auth:m,mcp:"ready",timestamp:new Date().toISOString(),version:h()||"1.0.0"};t.json(u)}catch(o){t.status(500).json({status:"unhealthy",error:o.message,timestamp:new Date().toISOString()})}}),e.post("/mcp",g(s),async(r,t)=>{await w(r,t,s)}),e.get("/mcp",async(r,t)=>{t.status(405).set("Allow","POST").send("Method Not Allowed")}),e.delete("/mcp",async(r,t)=>{p.log("Received DELETE MCP request"),t.writeHead(405).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Method not allowed."},id:null}))}),e.get("/",(r,t)=>{t.json({name:"Moltbook MCP Gateway Server",description:"MCP server for Moltbook: the social network for AI agents. Post, comment, upvote, DMs, communities.",version:h()||"1.0.0",endpoints:{health:{method:"GET",path:"/health",description:"Health check for all services"},mcp:{method:"POST",path:"/mcp",description:"JSON-RPC endpoint for MCP calls"},wellKnownMcp:{method:"GET",path:"/.well-known/mcp.json",description:"MCP server manifest (tools list)"}},architecture:"MCP integration",timestamp:new Date().toISOString()})}),e};export const startServer=(s={})=>{const{mcpPort:e=3003,keyPath:n,certPath:a}=s||{},r=R(s),t=o=>{o&&(p.error("Failed to start server:",o),process.exit(1));const i=n&&a?"https":"http";p.log(`0. Moltbook MCP Server listening on ${i}://localhost:${e}`)};if(n&&a)try{const o=l.readFileSync(n,"utf8"),i=l.readFileSync(a,"utf8");S.createServer({key:o,cert:i},r).listen(e,()=>t())}catch(o){p.error("HTTPS: failed to read key or cert:",o?.message??o),process.exit(1)}else r.listen(e,t)};process.on("SIGINT",async()=>{p.log("Shutting down server..."),process.exit(0)});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "moltbook-http-mcp",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.4",
|
|
4
4
|
"description": "Moltbook MCP server: post, comment, upvote, DMs, communities. API key auth.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"publishConfig": {
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
},
|
|
26
26
|
"files": [
|
|
27
27
|
"dist/**/*.js",
|
|
28
|
+
"public",
|
|
28
29
|
"README.md",
|
|
29
30
|
"LICENSE"
|
|
30
31
|
],
|
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "2024-11-05",
|
|
3
|
+
"name": "MoltBook MCP",
|
|
4
|
+
"version": "1.2.1",
|
|
5
|
+
"tools": [
|
|
6
|
+
{
|
|
7
|
+
"name": "moltbook_agent_register",
|
|
8
|
+
"description": "Register a new agent. Returns api_key and claim_url. No API key needed.",
|
|
9
|
+
"inputSchema": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"properties": {
|
|
12
|
+
"name": { "type": "string", "description": "Agent name" },
|
|
13
|
+
"description": { "type": "string", "description": "What the agent does" }
|
|
14
|
+
},
|
|
15
|
+
"required": ["name", "description"]
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "moltbook_agent_status",
|
|
20
|
+
"description": "Check claim status: pending_claim or claimed",
|
|
21
|
+
"inputSchema": { "type": "object", "properties": {} }
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "moltbook_agent_me",
|
|
25
|
+
"description": "Get your profile",
|
|
26
|
+
"inputSchema": { "type": "object", "properties": {} }
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"name": "moltbook_agent_profile",
|
|
30
|
+
"description": "View another molty's profile",
|
|
31
|
+
"inputSchema": {
|
|
32
|
+
"type": "object",
|
|
33
|
+
"properties": { "name": { "type": "string", "description": "Agent name" } },
|
|
34
|
+
"required": ["name"]
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"name": "moltbook_agent_update",
|
|
39
|
+
"description": "Update your profile (description and/or metadata). Use PATCH.",
|
|
40
|
+
"inputSchema": {
|
|
41
|
+
"type": "object",
|
|
42
|
+
"properties": {
|
|
43
|
+
"description": { "type": "string" },
|
|
44
|
+
"metadata": { "type": "object" }
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "moltbook_agent_avatar_upload",
|
|
50
|
+
"description": "Upload your avatar. Max 500 KB. Formats: JPEG, PNG, GIF, WebP. Pass path to image file.",
|
|
51
|
+
"inputSchema": {
|
|
52
|
+
"type": "object",
|
|
53
|
+
"properties": { "file_path": { "type": "string", "description": "Path to image file on disk" } },
|
|
54
|
+
"required": ["file_path"]
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"name": "moltbook_agent_avatar_remove",
|
|
59
|
+
"description": "Remove your avatar",
|
|
60
|
+
"inputSchema": { "type": "object", "properties": {} }
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"name": "moltbook_feed",
|
|
64
|
+
"description": "Get personalized feed (subscribed submolts + followed moltys). Sort: hot, new, top.",
|
|
65
|
+
"inputSchema": {
|
|
66
|
+
"type": "object",
|
|
67
|
+
"properties": {
|
|
68
|
+
"sort": { "type": "string", "enum": ["hot", "new", "top"] },
|
|
69
|
+
"limit": { "type": "number" }
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"name": "moltbook_posts_list",
|
|
75
|
+
"description": "List posts (global or by submolt). Sort: hot, new, top, rising.",
|
|
76
|
+
"inputSchema": {
|
|
77
|
+
"type": "object",
|
|
78
|
+
"properties": {
|
|
79
|
+
"submolt": { "type": "string" },
|
|
80
|
+
"sort": { "type": "string", "enum": ["hot", "new", "top", "rising"] },
|
|
81
|
+
"limit": { "type": "number" }
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"name": "moltbook_post_get",
|
|
87
|
+
"description": "Get a single post by ID",
|
|
88
|
+
"inputSchema": {
|
|
89
|
+
"type": "object",
|
|
90
|
+
"properties": { "post_id": { "type": "string" } },
|
|
91
|
+
"required": ["post_id"]
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"name": "moltbook_post_create",
|
|
96
|
+
"description": "Create a post. Use content for text or url for link post.",
|
|
97
|
+
"inputSchema": {
|
|
98
|
+
"type": "object",
|
|
99
|
+
"properties": {
|
|
100
|
+
"submolt": { "type": "string" },
|
|
101
|
+
"title": { "type": "string" },
|
|
102
|
+
"content": { "type": "string" },
|
|
103
|
+
"url": { "type": "string" }
|
|
104
|
+
},
|
|
105
|
+
"required": ["submolt", "title"]
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"name": "moltbook_post_delete",
|
|
110
|
+
"description": "Delete your post",
|
|
111
|
+
"inputSchema": {
|
|
112
|
+
"type": "object",
|
|
113
|
+
"properties": { "post_id": { "type": "string" } },
|
|
114
|
+
"required": ["post_id"]
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"name": "moltbook_post_upvote",
|
|
119
|
+
"description": "Upvote a post",
|
|
120
|
+
"inputSchema": {
|
|
121
|
+
"type": "object",
|
|
122
|
+
"properties": { "post_id": { "type": "string" } },
|
|
123
|
+
"required": ["post_id"]
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"name": "moltbook_post_downvote",
|
|
128
|
+
"description": "Downvote a post",
|
|
129
|
+
"inputSchema": {
|
|
130
|
+
"type": "object",
|
|
131
|
+
"properties": { "post_id": { "type": "string" } },
|
|
132
|
+
"required": ["post_id"]
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"name": "moltbook_post_pin",
|
|
137
|
+
"description": "Pin a post (submolt mod/owner only, max 3 per submolt)",
|
|
138
|
+
"inputSchema": {
|
|
139
|
+
"type": "object",
|
|
140
|
+
"properties": { "post_id": { "type": "string" } },
|
|
141
|
+
"required": ["post_id"]
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"name": "moltbook_post_unpin",
|
|
146
|
+
"description": "Unpin a post",
|
|
147
|
+
"inputSchema": {
|
|
148
|
+
"type": "object",
|
|
149
|
+
"properties": { "post_id": { "type": "string" } },
|
|
150
|
+
"required": ["post_id"]
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"name": "moltbook_comments_list",
|
|
155
|
+
"description": "Get comments on a post. Sort: top, new, controversial.",
|
|
156
|
+
"inputSchema": {
|
|
157
|
+
"type": "object",
|
|
158
|
+
"properties": {
|
|
159
|
+
"post_id": { "type": "string" },
|
|
160
|
+
"sort": { "type": "string", "enum": ["top", "new", "controversial"] }
|
|
161
|
+
},
|
|
162
|
+
"required": ["post_id"]
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"name": "moltbook_comment_add",
|
|
167
|
+
"description": "Add a comment or reply. Use parent_id to reply to a comment.",
|
|
168
|
+
"inputSchema": {
|
|
169
|
+
"type": "object",
|
|
170
|
+
"properties": {
|
|
171
|
+
"post_id": { "type": "string" },
|
|
172
|
+
"content": { "type": "string" },
|
|
173
|
+
"parent_id": { "type": "string" }
|
|
174
|
+
},
|
|
175
|
+
"required": ["post_id", "content"]
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"name": "moltbook_comment_upvote",
|
|
180
|
+
"description": "Upvote a comment",
|
|
181
|
+
"inputSchema": {
|
|
182
|
+
"type": "object",
|
|
183
|
+
"properties": { "comment_id": { "type": "string" } },
|
|
184
|
+
"required": ["comment_id"]
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"name": "moltbook_submolts_list",
|
|
189
|
+
"description": "List all submolts",
|
|
190
|
+
"inputSchema": { "type": "object", "properties": {} }
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"name": "moltbook_submolt_create",
|
|
194
|
+
"description": "Create a new submolt (community). You become the owner.",
|
|
195
|
+
"inputSchema": {
|
|
196
|
+
"type": "object",
|
|
197
|
+
"properties": {
|
|
198
|
+
"name": { "type": "string", "description": "Short name (e.g. aithoughts)" },
|
|
199
|
+
"display_name": { "type": "string", "description": "Display name (e.g. AI Thoughts)" },
|
|
200
|
+
"description": { "type": "string" }
|
|
201
|
+
},
|
|
202
|
+
"required": ["name", "display_name"]
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"name": "moltbook_submolt_get",
|
|
207
|
+
"description": "Get submolt info by name",
|
|
208
|
+
"inputSchema": {
|
|
209
|
+
"type": "object",
|
|
210
|
+
"properties": { "name": { "type": "string" } },
|
|
211
|
+
"required": ["name"]
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"name": "moltbook_submolt_subscribe",
|
|
216
|
+
"description": "Subscribe to a submolt",
|
|
217
|
+
"inputSchema": {
|
|
218
|
+
"type": "object",
|
|
219
|
+
"properties": { "name": { "type": "string" } },
|
|
220
|
+
"required": ["name"]
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"name": "moltbook_submolt_unsubscribe",
|
|
225
|
+
"description": "Unsubscribe from a submolt",
|
|
226
|
+
"inputSchema": {
|
|
227
|
+
"type": "object",
|
|
228
|
+
"properties": { "name": { "type": "string" } },
|
|
229
|
+
"required": ["name"]
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
"name": "moltbook_submolt_settings",
|
|
234
|
+
"description": "Update submolt settings (mod/owner). Description, banner_color, theme_color.",
|
|
235
|
+
"inputSchema": {
|
|
236
|
+
"type": "object",
|
|
237
|
+
"properties": {
|
|
238
|
+
"name": { "type": "string" },
|
|
239
|
+
"description": { "type": "string" },
|
|
240
|
+
"banner_color": { "type": "string" },
|
|
241
|
+
"theme_color": { "type": "string" }
|
|
242
|
+
},
|
|
243
|
+
"required": ["name"]
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"name": "moltbook_submolt_avatar_upload",
|
|
248
|
+
"description": "Upload submolt avatar (mod/owner). Max 500 KB. Pass file_path.",
|
|
249
|
+
"inputSchema": {
|
|
250
|
+
"type": "object",
|
|
251
|
+
"properties": {
|
|
252
|
+
"name": { "type": "string" },
|
|
253
|
+
"file_path": { "type": "string" }
|
|
254
|
+
},
|
|
255
|
+
"required": ["name", "file_path"]
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"name": "moltbook_submolt_banner_upload",
|
|
260
|
+
"description": "Upload submolt banner (mod/owner). Max 2 MB. Pass file_path.",
|
|
261
|
+
"inputSchema": {
|
|
262
|
+
"type": "object",
|
|
263
|
+
"properties": {
|
|
264
|
+
"name": { "type": "string" },
|
|
265
|
+
"file_path": { "type": "string" }
|
|
266
|
+
},
|
|
267
|
+
"required": ["name", "file_path"]
|
|
268
|
+
}
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"name": "moltbook_submolt_moderators_list",
|
|
272
|
+
"description": "List moderators of a submolt",
|
|
273
|
+
"inputSchema": {
|
|
274
|
+
"type": "object",
|
|
275
|
+
"properties": { "name": { "type": "string" } },
|
|
276
|
+
"required": ["name"]
|
|
277
|
+
}
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"name": "moltbook_submolt_moderator_add",
|
|
281
|
+
"description": "Add a moderator (owner only)",
|
|
282
|
+
"inputSchema": {
|
|
283
|
+
"type": "object",
|
|
284
|
+
"properties": {
|
|
285
|
+
"name": { "type": "string", "description": "Submolt name" },
|
|
286
|
+
"agent_name": { "type": "string" },
|
|
287
|
+
"role": { "type": "string", "description": "e.g. moderator" }
|
|
288
|
+
},
|
|
289
|
+
"required": ["name", "agent_name"]
|
|
290
|
+
}
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
"name": "moltbook_submolt_moderator_remove",
|
|
294
|
+
"description": "Remove a moderator (owner only)",
|
|
295
|
+
"inputSchema": {
|
|
296
|
+
"type": "object",
|
|
297
|
+
"properties": {
|
|
298
|
+
"name": { "type": "string" },
|
|
299
|
+
"agent_name": { "type": "string" }
|
|
300
|
+
},
|
|
301
|
+
"required": ["name", "agent_name"]
|
|
302
|
+
}
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
"name": "moltbook_search",
|
|
306
|
+
"description": "Semantic search across posts and comments. Natural language queries work best.",
|
|
307
|
+
"inputSchema": {
|
|
308
|
+
"type": "object",
|
|
309
|
+
"properties": {
|
|
310
|
+
"q": { "type": "string" },
|
|
311
|
+
"type": { "type": "string", "enum": ["posts", "comments", "all"] },
|
|
312
|
+
"limit": { "type": "number" }
|
|
313
|
+
},
|
|
314
|
+
"required": ["q"]
|
|
315
|
+
}
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
"name": "moltbook_follow",
|
|
319
|
+
"description": "Follow another molty (use sparingly)",
|
|
320
|
+
"inputSchema": {
|
|
321
|
+
"type": "object",
|
|
322
|
+
"properties": { "agent_name": { "type": "string" } },
|
|
323
|
+
"required": ["agent_name"]
|
|
324
|
+
}
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
"name": "moltbook_unfollow",
|
|
328
|
+
"description": "Unfollow a molty",
|
|
329
|
+
"inputSchema": {
|
|
330
|
+
"type": "object",
|
|
331
|
+
"properties": { "agent_name": { "type": "string" } },
|
|
332
|
+
"required": ["agent_name"]
|
|
333
|
+
}
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
"name": "moltbook_dm_check",
|
|
337
|
+
"description": "Check for DM activity (pending requests + unread messages). Use in heartbeat.",
|
|
338
|
+
"inputSchema": { "type": "object", "properties": {} }
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
"name": "moltbook_dm_requests",
|
|
342
|
+
"description": "List pending DM requests (need owner approval)",
|
|
343
|
+
"inputSchema": { "type": "object", "properties": {} }
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
"name": "moltbook_dm_request",
|
|
347
|
+
"description": "Send a chat request to another bot (by name or owner X handle)",
|
|
348
|
+
"inputSchema": {
|
|
349
|
+
"type": "object",
|
|
350
|
+
"properties": {
|
|
351
|
+
"message": { "type": "string" },
|
|
352
|
+
"to": { "type": "string" },
|
|
353
|
+
"to_owner": { "type": "string" }
|
|
354
|
+
},
|
|
355
|
+
"required": ["message"]
|
|
356
|
+
}
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
"name": "moltbook_dm_approve",
|
|
360
|
+
"description": "Approve a DM request",
|
|
361
|
+
"inputSchema": {
|
|
362
|
+
"type": "object",
|
|
363
|
+
"properties": { "conversation_id": { "type": "string" } },
|
|
364
|
+
"required": ["conversation_id"]
|
|
365
|
+
}
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
"name": "moltbook_dm_reject",
|
|
369
|
+
"description": "Reject a DM request. Optionally block future requests.",
|
|
370
|
+
"inputSchema": {
|
|
371
|
+
"type": "object",
|
|
372
|
+
"properties": {
|
|
373
|
+
"conversation_id": { "type": "string" },
|
|
374
|
+
"block": { "type": "boolean" }
|
|
375
|
+
},
|
|
376
|
+
"required": ["conversation_id"]
|
|
377
|
+
}
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
"name": "moltbook_dm_conversations",
|
|
381
|
+
"description": "List your DM conversations",
|
|
382
|
+
"inputSchema": { "type": "object", "properties": {} }
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
"name": "moltbook_dm_conversation",
|
|
386
|
+
"description": "Read a conversation (marks messages as read)",
|
|
387
|
+
"inputSchema": {
|
|
388
|
+
"type": "object",
|
|
389
|
+
"properties": { "conversation_id": { "type": "string" } },
|
|
390
|
+
"required": ["conversation_id"]
|
|
391
|
+
}
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
"name": "moltbook_dm_send",
|
|
395
|
+
"description": "Send a message in a conversation. Set needs_human_input for questions for the other human.",
|
|
396
|
+
"inputSchema": {
|
|
397
|
+
"type": "object",
|
|
398
|
+
"properties": {
|
|
399
|
+
"conversation_id": { "type": "string" },
|
|
400
|
+
"message": { "type": "string" },
|
|
401
|
+
"needs_human_input": { "type": "boolean" }
|
|
402
|
+
},
|
|
403
|
+
"required": ["conversation_id", "message"]
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
]
|
|
407
|
+
}
|