@kintone/mcp-server 1.4.0 → 1.5.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/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.5.0](https://github.com/kintone/mcp-server/compare/1.4.0...1.5.0) (2026-06-02)
4
+
5
+
6
+ ### Features
7
+
8
+ * add kintone record comment tools (get/add) ([#414](https://github.com/kintone/mcp-server/issues/414)) ([d2ae555](https://github.com/kintone/mcp-server/commit/d2ae55519c1312e38fe4666f853086b44458fadc))
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **deps:** update dependency @modelcontextprotocol/sdk to v1.29.0 ([#317](https://github.com/kintone/mcp-server/issues/317)) ([1688179](https://github.com/kintone/mcp-server/commit/168817913c7a7927dc7304cce949e0efbcaa6793))
14
+ * remove stray console.log polluting MCP stdio stream ([#463](https://github.com/kintone/mcp-server/issues/463)) ([ab15d5a](https://github.com/kintone/mcp-server/commit/ab15d5a9525d45e64d2e8396d0ae568a20671d2f))
15
+ * use --node-linker=hoisted instead of --shamefully-hoist ([#459](https://github.com/kintone/mcp-server/issues/459)) ([a276b1c](https://github.com/kintone/mcp-server/commit/a276b1ca4939b68f858a2ddbb2186efccb57adc2))
16
+
3
17
  ## [1.4.0](https://github.com/kintone/mcp-server/compare/1.3.15...1.4.0) (2026-05-27)
4
18
 
5
19
 
package/README.md CHANGED
@@ -209,6 +209,8 @@ export HTTPS_PROXY="http://username:password@proxy.example.com:8080"
209
209
  | `kintone-update-records` | 複数のレコードを更新 |
210
210
  | `kintone-delete-records` | 複数のレコードを削除 |
211
211
  | `kintone-update-statuses` | 複数のレコードのステータスを更新 |
212
+ | `kintone-get-record-comments` | レコードのコメントを取得 |
213
+ | `kintone-add-record-comment` | レコードにコメントを追加 |
212
214
  | `kintone-add-app` | 動作テスト環境にアプリを作成 |
213
215
  | `kintone-deploy-app` | アプリ設定を運用環境へ反映 |
214
216
  | `kintone-update-general-settings` | アプリの一般設定を変更 |
@@ -1,5 +1,7 @@
1
+ import { addRecordComment } from "./kintone/record/add-record-comment.js";
1
2
  import { addRecords } from "./kintone/record/add-records.js";
2
3
  import { deleteRecords } from "./kintone/record/delete-records.js";
4
+ import { getRecordComments } from "./kintone/record/get-record-comments.js";
3
5
  import { getRecords } from "./kintone/record/get-records.js";
4
6
  import { updateRecords } from "./kintone/record/update-records.js";
5
7
  import { getApp } from "./kintone/app/get-app.js";
@@ -36,6 +38,8 @@ export const tools = [
36
38
  addRecords,
37
39
  deleteRecords,
38
40
  getRecords,
41
+ getRecordComments,
42
+ addRecordComment,
39
43
  updateRecords,
40
44
  addApp,
41
45
  deployApp,
@@ -89,7 +89,6 @@ const toolConfig = {
89
89
  };
90
90
  const callback = async ({ app, lang, preview }, { client }) => {
91
91
  const settings = await client.app.getAppSettings({ app, lang, preview });
92
- console.log(settings);
93
92
  const result = {
94
93
  name: settings.name,
95
94
  description: settings.description,
@@ -0,0 +1,58 @@
1
+ import { z } from "zod";
2
+ import { createTool } from "../../factory.js";
3
+ const mentionSchema = z.object({
4
+ code: z
5
+ .string()
6
+ .describe("Login name (for USER), group/role code (for GROUP), or organization code (for ORGANIZATION). Display names are not accepted."),
7
+ type: z
8
+ .enum(["USER", "GROUP", "ORGANIZATION"])
9
+ .describe("Type of the mention target"),
10
+ });
11
+ const inputSchema = {
12
+ app: z
13
+ .string()
14
+ .describe("The ID of the app that contains the record (numeric value as string)"),
15
+ record: z.string().describe("The ID of the record to add a comment to"),
16
+ text: z
17
+ .string()
18
+ .min(1)
19
+ .max(65535)
20
+ .describe("Comment text. To mention users/groups/organizations, list the corresponding entries in 'mentions'. Do NOT include '@code' tokens in this text — not even as a greeting prefix such as '@user1 さん、' or '@group_name '. Mentions specified via the 'mentions' parameter are auto-rendered into the posted comment by kintone; any '@code' written in this text becomes a plain-text literal that does not link, does not notify, and visually duplicates the auto-rendered mention."),
21
+ mentions: z
22
+ .array(mentionSchema)
23
+ .optional()
24
+ .describe("Mentions to attach to the comment. Each entry pairs a code with its type (USER/GROUP/ORGANIZATION)."),
25
+ };
26
+ const outputSchema = {
27
+ id: z.string().describe("ID of the added comment"),
28
+ };
29
+ const toolName = "kintone-add-record-comment";
30
+ const toolConfig = {
31
+ title: "Add Record Comment",
32
+ description: "Add a single comment to a kintone record. The kintone API accepts one comment per call; to add comments to multiple records, call this tool repeatedly.",
33
+ inputSchema,
34
+ outputSchema,
35
+ };
36
+ const callback = async ({ app, record, text, mentions }, { client }) => {
37
+ const response = await client.record.addRecordComment({
38
+ app,
39
+ record,
40
+ comment: {
41
+ text,
42
+ mentions,
43
+ },
44
+ });
45
+ const result = {
46
+ id: response.id,
47
+ };
48
+ return {
49
+ structuredContent: result,
50
+ content: [
51
+ {
52
+ type: "text",
53
+ text: JSON.stringify(result, null, 2),
54
+ },
55
+ ],
56
+ };
57
+ };
58
+ export const addRecordComment = createTool(toolName, toolConfig, callback);
@@ -0,0 +1,82 @@
1
+ import { z } from "zod";
2
+ import { createTool } from "../../factory.js";
3
+ const inputSchema = {
4
+ app: z
5
+ .string()
6
+ .describe("The ID of the app that contains the record (numeric value as string)"),
7
+ record: z.string().describe("The ID of the record to retrieve comments from"),
8
+ order: z
9
+ .enum(["asc", "desc"])
10
+ .optional()
11
+ .describe("Sort order of comments by createdAt. 'asc' = oldest first, 'desc' = newest first (default: desc)"),
12
+ limit: z
13
+ .number()
14
+ .min(1)
15
+ .max(10)
16
+ .optional()
17
+ .describe("Maximum number of comments to retrieve (1-10, default: 10 by kintone API)"),
18
+ offset: z
19
+ .number()
20
+ .min(0)
21
+ .optional()
22
+ .describe("Number of comments to skip (default: 0)"),
23
+ };
24
+ const commentSchema = z.object({
25
+ id: z.string().describe("Comment ID"),
26
+ text: z.string().describe("Comment text"),
27
+ createdAt: z.string().describe("Comment creation datetime (ISO 8601)"),
28
+ creator: z
29
+ .object({
30
+ code: z.string().describe("User code of the comment creator"),
31
+ name: z.string().describe("Display name of the comment creator"),
32
+ })
33
+ .describe("Information about the comment creator"),
34
+ mentions: z
35
+ .array(z.object({
36
+ code: z.string().describe("Code of the mentioned user/group/org"),
37
+ type: z
38
+ .enum(["USER", "GROUP", "ORGANIZATION"])
39
+ .describe("Type of the mention target"),
40
+ }))
41
+ .describe("Mentions in the comment"),
42
+ });
43
+ const outputSchema = {
44
+ comments: z.array(commentSchema).describe("Array of comments on the record"),
45
+ older: z
46
+ .boolean()
47
+ .describe("Whether there are older comments beyond this page"),
48
+ newer: z
49
+ .boolean()
50
+ .describe("Whether there are newer comments beyond this page"),
51
+ };
52
+ const toolName = "kintone-get-record-comments";
53
+ const toolConfig = {
54
+ title: "Get Record Comments",
55
+ description: "Get comments posted on a single kintone record. The kintone API returns comments for one record at a time; to fetch comments for multiple records, call this tool repeatedly. Up to 10 comments are returned per call; use offset to paginate.",
56
+ inputSchema,
57
+ outputSchema,
58
+ };
59
+ const callback = async ({ app, record, order, limit, offset }, { client }) => {
60
+ const response = await client.record.getRecordComments({
61
+ app,
62
+ record,
63
+ order,
64
+ limit,
65
+ offset,
66
+ });
67
+ const result = {
68
+ comments: response.comments,
69
+ older: response.older,
70
+ newer: response.newer,
71
+ };
72
+ return {
73
+ structuredContent: result,
74
+ content: [
75
+ {
76
+ type: "text",
77
+ text: JSON.stringify(result, null, 2),
78
+ },
79
+ ],
80
+ };
81
+ };
82
+ export const getRecordComments = createTool(toolName, toolConfig, callback);
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // This file is auto-generated. Do not edit manually.
2
- export const version = "1.4.0"; // x-release-please-version
2
+ export const version = "1.5.0"; // x-release-please-version
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kintone/mcp-server",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "description": "The official MCP Server for kintone",
5
5
  "keywords": [
6
6
  "kintone",
@@ -31,7 +31,7 @@
31
31
  ],
32
32
  "dependencies": {
33
33
  "@kintone/rest-api-client": "6.2.0",
34
- "@modelcontextprotocol/sdk": "1.26.0",
34
+ "@modelcontextprotocol/sdk": "1.29.0",
35
35
  "file-type": "22.0.1",
36
36
  "https-proxy-agent": "7.0.6",
37
37
  "zod": "3.25.76"
@@ -48,7 +48,7 @@
48
48
  "eslint": "9.39.4",
49
49
  "eslint-plugin-package-json": "0.88.3",
50
50
  "globals": "17.6.0",
51
- "npm": "11.15.0",
51
+ "npm": "11.16.0",
52
52
  "prettier": "3.8.3",
53
53
  "tsx": "4.22.3",
54
54
  "typescript": "5.9.3",