kimiflare 0.13.6 → 0.14.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 CHANGED
@@ -4,6 +4,7 @@
4
4
 
5
5
  <p align="center">
6
6
  <a href="https://www.npmjs.com/package/kimiflare"><img src="https://img.shields.io/npm/v/kimiflare?style=flat-square&color=cb3837" alt="npm version"></a>
7
+ <a href="https://www.npmjs.com/package/kimiflare"><img src="https://img.shields.io/npm/dm/kimiflare?style=flat-square&color=cb3837" alt="npm downloads"></a>
7
8
  <a href="https://github.com/sinameraji/kimiflare/blob/main/LICENSE"><img src="https://img.shields.io/github/license/sinameraji/kimiflare?style=flat-square&color=2ea44f" alt="license"></a>
8
9
  <img src="https://img.shields.io/badge/node-%3E%3D20-339933?style=flat-square&logo=nodedotjs&logoColor=white" alt="Node.js >= 20">
9
10
  <img src="https://img.shields.io/badge/typescript-5.7-3178c6?style=flat-square&logo=typescript&logoColor=white" alt="TypeScript">
@@ -59,6 +60,7 @@ Requires Node.js ≥ 20.
59
60
  | **Session persistence** | Every turn is auto-saved. `/resume` lists past sessions (with message counts) in a paginated picker. |
60
61
  | **Smart permissions** | Bash session-allow is keyed by the first token (e.g., allow all `git` commands). Write/edit show a unified diff before you approve. |
61
62
  | **Project context (`/init`)** | Scans your repo and writes a concise `KIMI.md` — build commands, layout, conventions. Auto-loaded on every launch. |
63
+ | **MCP server integration** | Plug in external tools via the Model Context Protocol — local stdio servers or remote SSE endpoints. GitHub, Sentry, docs search, databases, etc. |
62
64
  | **Co-author auto-append** | Detects `git commit` commands and auto-injects `Co-authored-by: kimiflare <kimiflare@proton.me>`. |
63
65
  | **Resilient transport** | Retries Cloudflare capacity errors (code 3040) and 5xx with exponential backoff up to 5 attempts. |
64
66
 
@@ -90,6 +92,46 @@ EOF
90
92
  chmod 600 ~/.config/kimiflare/config.json
91
93
  ```
92
94
 
95
+ ## MCP servers (Model Context Protocol)
96
+
97
+ kimiflare supports external tools via MCP. Add servers to your `~/.config/kimiflare/config.json`:
98
+
99
+ ```json
100
+ {
101
+ "accountId": "YOUR_ACCOUNT_ID",
102
+ "apiToken": "YOUR_API_TOKEN",
103
+ "mcpServers": {
104
+ "github": {
105
+ "type": "local",
106
+ "command": ["npx", "-y", "@modelcontextprotocol/server-github"],
107
+ "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxx" }
108
+ },
109
+ "fetch": {
110
+ "type": "local",
111
+ "command": ["uvx", "mcp-server-fetch"]
112
+ },
113
+ "my-remote": {
114
+ "type": "remote",
115
+ "url": "https://example.com/mcp",
116
+ "headers": { "Authorization": "Bearer token123" }
117
+ }
118
+ }
119
+ }
120
+ ```
121
+
122
+ - `type`: `"local"` (stdio subprocess) or `"remote"` (SSE/HTTP endpoint)
123
+ - `command`: array with executable and args (local only)
124
+ - `url`: endpoint URL (remote only)
125
+ - `env`: environment variables for local servers
126
+ - `headers`: HTTP headers for remote servers
127
+ - `enabled`: set to `false` to skip a server
128
+
129
+ MCP tools appear prefixed as `mcp_<server>_<tool>` alongside built-in tools.
130
+
131
+ **Commands:**
132
+ - `/mcp list` — show connected servers and tool counts
133
+ - `/mcp reload` — disconnect and reconnect all configured servers
134
+
93
135
  ## Usage
94
136
 
95
137
  ### Interactive TUI
@@ -143,6 +185,8 @@ Supported formats: PNG, JPG, JPEG, WebP, GIF, BMP (up to 5 MB each, 10 per messa
143
185
  | `/resume` | Pick a past conversation to restore. |
144
186
  | `/compact` | Summarize older turns to free context. Suggested automatically at ~80% full. |
145
187
  | `/init` | Scan the repo and write a `KIMI.md` so future agents have project context. |
188
+ | `/mcp list` | List connected MCP servers and their tools. |
189
+ | `/mcp reload` | Disconnect and reconnect all configured MCP servers. |
146
190
  | `/reasoning` | Toggle chain-of-thought display. |
147
191
  | `/clear` | Reset the current conversation. |
148
192
  | `/cost` | Show token usage for the current turn. |
@@ -257,6 +301,89 @@ Contributions are welcome!
257
301
  6. Push: `git push origin feat/your-feature`
258
302
  7. Open a Pull Request
259
303
 
304
+ ## Testing MCP locally
305
+
306
+ You don't need a real MCP server to test the integration. Here's a minimal test server you can save as `test-mcp-server.js`:
307
+
308
+ ```js
309
+ // test-mcp-server.js — a minimal MCP server for testing
310
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
311
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
312
+
313
+ const server = new Server({ name: "test-server", version: "1.0.0" }, { capabilities: { tools: {} } });
314
+
315
+ server.setRequestHandler("tools/list", async () => ({
316
+ tools: [
317
+ {
318
+ name: "greet",
319
+ description: "Greet someone by name",
320
+ inputSchema: {
321
+ type: "object",
322
+ properties: { name: { type: "string" } },
323
+ required: ["name"],
324
+ },
325
+ },
326
+ {
327
+ name: "add",
328
+ description: "Add two numbers",
329
+ inputSchema: {
330
+ type: "object",
331
+ properties: { a: { type: "number" }, b: { type: "number" } },
332
+ required: ["a", "b"],
333
+ },
334
+ },
335
+ ],
336
+ }));
337
+
338
+ server.setRequestHandler("tools/call", async (req) => {
339
+ if (req.params.name === "greet") {
340
+ return { content: [{ type: "text", text: `Hello, ${req.params.arguments.name}!` }] };
341
+ }
342
+ if (req.params.name === "add") {
343
+ const sum = req.params.arguments.a + req.params.arguments.b;
344
+ return { content: [{ type: "text", text: String(sum) }] };
345
+ }
346
+ throw new Error("Unknown tool");
347
+ });
348
+
349
+ const transport = new StdioServerTransport();
350
+ await server.connect(transport);
351
+ ```
352
+
353
+ Then add it to your config:
354
+
355
+ ```json
356
+ {
357
+ "mcpServers": {
358
+ "test": {
359
+ "type": "local",
360
+ "command": ["node", "/path/to/test-mcp-server.js"]
361
+ }
362
+ }
363
+ }
364
+ ```
365
+
366
+ Launch kimiflare and try:
367
+ - `/mcp list` — should show `test (local) — 2 tools`
368
+ - `use mcp_test_greet with name "kimiflare"` — should return `Hello, kimiflare!`
369
+ - `use mcp_test_add with a 3 and b 5` — should return `8`
370
+
371
+ For a real-world test, try the [official GitHub MCP server](https://github.com/modelcontextprotocol/servers/tree/main/src/github):
372
+
373
+ ```json
374
+ {
375
+ "mcpServers": {
376
+ "github": {
377
+ "type": "local",
378
+ "command": ["npx", "-y", "@modelcontextprotocol/server-github"],
379
+ "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxx" }
380
+ }
381
+ }
382
+ }
383
+ ```
384
+
385
+ Then ask: `search for issues labeled bug in sinameraji/kimiflare`
386
+
260
387
  ## License
261
388
 
262
389
  [MIT](LICENSE) © Sina Meraji