cc-lark 0.1.1
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/.github/workflows/ci.yml +47 -0
- package/.github/workflows/release.yml +47 -0
- package/.github/workflows/sync-upstream.yml +127 -0
- package/.prettierrc.json +7 -0
- package/README.md +214 -0
- package/dist/core/api-error.d.ts +193 -0
- package/dist/core/api-error.d.ts.map +1 -0
- package/dist/core/api-error.js +263 -0
- package/dist/core/api-error.js.map +1 -0
- package/dist/core/auth-errors.d.ts +13 -0
- package/dist/core/auth-errors.d.ts.map +1 -0
- package/dist/core/auth-errors.js +14 -0
- package/dist/core/auth-errors.js.map +1 -0
- package/dist/core/config.d.ts +60 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +115 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/device-flow.d.ts +80 -0
- package/dist/core/device-flow.d.ts.map +1 -0
- package/dist/core/device-flow.js +231 -0
- package/dist/core/device-flow.js.map +1 -0
- package/dist/core/index.d.ts +16 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +16 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lark-client.d.ts +136 -0
- package/dist/core/lark-client.d.ts.map +1 -0
- package/dist/core/lark-client.js +315 -0
- package/dist/core/lark-client.js.map +1 -0
- package/dist/core/token-store.d.ts +67 -0
- package/dist/core/token-store.d.ts.map +1 -0
- package/dist/core/token-store.js +215 -0
- package/dist/core/token-store.js.map +1 -0
- package/dist/core/types.d.ts +286 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +11 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/uat-client.d.ts +64 -0
- package/dist/core/uat-client.d.ts.map +1 -0
- package/dist/core/uat-client.js +227 -0
- package/dist/core/uat-client.js.map +1 -0
- package/dist/core/version.d.ts +26 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +50 -0
- package/dist/core/version.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +116 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/bitable/app.d.ts +20 -0
- package/dist/tools/bitable/app.d.ts.map +1 -0
- package/dist/tools/bitable/app.js +301 -0
- package/dist/tools/bitable/app.js.map +1 -0
- package/dist/tools/bitable/field.d.ts +19 -0
- package/dist/tools/bitable/field.d.ts.map +1 -0
- package/dist/tools/bitable/field.js +315 -0
- package/dist/tools/bitable/field.js.map +1 -0
- package/dist/tools/bitable/index.d.ts +21 -0
- package/dist/tools/bitable/index.d.ts.map +1 -0
- package/dist/tools/bitable/index.js +39 -0
- package/dist/tools/bitable/index.js.map +1 -0
- package/dist/tools/bitable/record.d.ts +22 -0
- package/dist/tools/bitable/record.d.ts.map +1 -0
- package/dist/tools/bitable/record.js +434 -0
- package/dist/tools/bitable/record.js.map +1 -0
- package/dist/tools/bitable/table.d.ts +21 -0
- package/dist/tools/bitable/table.d.ts.map +1 -0
- package/dist/tools/bitable/table.js +361 -0
- package/dist/tools/bitable/table.js.map +1 -0
- package/dist/tools/calendar/calendar.d.ts +18 -0
- package/dist/tools/calendar/calendar.d.ts.map +1 -0
- package/dist/tools/calendar/calendar.js +192 -0
- package/dist/tools/calendar/calendar.js.map +1 -0
- package/dist/tools/calendar/event.d.ts +20 -0
- package/dist/tools/calendar/event.d.ts.map +1 -0
- package/dist/tools/calendar/event.js +465 -0
- package/dist/tools/calendar/event.js.map +1 -0
- package/dist/tools/calendar/index.d.ts +19 -0
- package/dist/tools/calendar/index.d.ts.map +1 -0
- package/dist/tools/calendar/index.js +37 -0
- package/dist/tools/calendar/index.js.map +1 -0
- package/dist/tools/chat/chat.d.ts +11 -0
- package/dist/tools/chat/chat.d.ts.map +1 -0
- package/dist/tools/chat/chat.js +106 -0
- package/dist/tools/chat/chat.js.map +1 -0
- package/dist/tools/chat/index.d.ts +11 -0
- package/dist/tools/chat/index.d.ts.map +1 -0
- package/dist/tools/chat/index.js +20 -0
- package/dist/tools/chat/index.js.map +1 -0
- package/dist/tools/chat/members.d.ts +9 -0
- package/dist/tools/chat/members.d.ts.map +1 -0
- package/dist/tools/chat/members.js +80 -0
- package/dist/tools/chat/members.js.map +1 -0
- package/dist/tools/common/get-user.d.ts +11 -0
- package/dist/tools/common/get-user.d.ts.map +1 -0
- package/dist/tools/common/get-user.js +112 -0
- package/dist/tools/common/get-user.js.map +1 -0
- package/dist/tools/common/index.d.ts +11 -0
- package/dist/tools/common/index.d.ts.map +1 -0
- package/dist/tools/common/index.js +20 -0
- package/dist/tools/common/index.js.map +1 -0
- package/dist/tools/common/search-user.d.ts +9 -0
- package/dist/tools/common/search-user.d.ts.map +1 -0
- package/dist/tools/common/search-user.js +88 -0
- package/dist/tools/common/search-user.js.map +1 -0
- package/dist/tools/doc/create.d.ts +17 -0
- package/dist/tools/doc/create.d.ts.map +1 -0
- package/dist/tools/doc/create.js +159 -0
- package/dist/tools/doc/create.js.map +1 -0
- package/dist/tools/doc/fetch.d.ts +17 -0
- package/dist/tools/doc/fetch.d.ts.map +1 -0
- package/dist/tools/doc/fetch.js +123 -0
- package/dist/tools/doc/fetch.js.map +1 -0
- package/dist/tools/doc/index.d.ts +21 -0
- package/dist/tools/doc/index.d.ts.map +1 -0
- package/dist/tools/doc/index.js +33 -0
- package/dist/tools/doc/index.js.map +1 -0
- package/dist/tools/doc/shared.d.ts +69 -0
- package/dist/tools/doc/shared.d.ts.map +1 -0
- package/dist/tools/doc/shared.js +172 -0
- package/dist/tools/doc/shared.js.map +1 -0
- package/dist/tools/doc/update.d.ts +25 -0
- package/dist/tools/doc/update.d.ts.map +1 -0
- package/dist/tools/doc/update.js +208 -0
- package/dist/tools/doc/update.js.map +1 -0
- package/dist/tools/drive/file.d.ts +13 -0
- package/dist/tools/drive/file.d.ts.map +1 -0
- package/dist/tools/drive/file.js +212 -0
- package/dist/tools/drive/file.js.map +1 -0
- package/dist/tools/drive/index.d.ts +12 -0
- package/dist/tools/drive/index.d.ts.map +1 -0
- package/dist/tools/drive/index.js +25 -0
- package/dist/tools/drive/index.js.map +1 -0
- package/dist/tools/im/format-messages.d.ts +99 -0
- package/dist/tools/im/format-messages.d.ts.map +1 -0
- package/dist/tools/im/format-messages.js +277 -0
- package/dist/tools/im/format-messages.js.map +1 -0
- package/dist/tools/im/helpers.d.ts +53 -0
- package/dist/tools/im/helpers.d.ts.map +1 -0
- package/dist/tools/im/helpers.js +85 -0
- package/dist/tools/im/helpers.js.map +1 -0
- package/dist/tools/im/index.d.ts +25 -0
- package/dist/tools/im/index.d.ts.map +1 -0
- package/dist/tools/im/index.js +44 -0
- package/dist/tools/im/index.js.map +1 -0
- package/dist/tools/im/message-read.d.ts +19 -0
- package/dist/tools/im/message-read.d.ts.map +1 -0
- package/dist/tools/im/message-read.js +526 -0
- package/dist/tools/im/message-read.js.map +1 -0
- package/dist/tools/im/message.d.ts +22 -0
- package/dist/tools/im/message.d.ts.map +1 -0
- package/dist/tools/im/message.js +233 -0
- package/dist/tools/im/message.js.map +1 -0
- package/dist/tools/im/resource.d.ts +19 -0
- package/dist/tools/im/resource.d.ts.map +1 -0
- package/dist/tools/im/resource.js +185 -0
- package/dist/tools/im/resource.js.map +1 -0
- package/dist/tools/im/time-utils.d.ts +70 -0
- package/dist/tools/im/time-utils.d.ts.map +1 -0
- package/dist/tools/im/time-utils.js +277 -0
- package/dist/tools/im/time-utils.js.map +1 -0
- package/dist/tools/index.d.ts +85 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +135 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/oauth.d.ts +15 -0
- package/dist/tools/oauth.d.ts.map +1 -0
- package/dist/tools/oauth.js +379 -0
- package/dist/tools/oauth.js.map +1 -0
- package/dist/tools/search/doc-search.d.ts +9 -0
- package/dist/tools/search/doc-search.d.ts.map +1 -0
- package/dist/tools/search/doc-search.js +219 -0
- package/dist/tools/search/doc-search.js.map +1 -0
- package/dist/tools/search/index.d.ts +11 -0
- package/dist/tools/search/index.d.ts.map +1 -0
- package/dist/tools/search/index.js +18 -0
- package/dist/tools/search/index.js.map +1 -0
- package/dist/tools/sheets/index.d.ts +11 -0
- package/dist/tools/sheets/index.d.ts.map +1 -0
- package/dist/tools/sheets/index.js +18 -0
- package/dist/tools/sheets/index.js.map +1 -0
- package/dist/tools/sheets/sheet.d.ts +11 -0
- package/dist/tools/sheets/sheet.d.ts.map +1 -0
- package/dist/tools/sheets/sheet.js +332 -0
- package/dist/tools/sheets/sheet.js.map +1 -0
- package/dist/tools/task/index.d.ts +12 -0
- package/dist/tools/task/index.d.ts.map +1 -0
- package/dist/tools/task/index.js +30 -0
- package/dist/tools/task/index.js.map +1 -0
- package/dist/tools/task/task.d.ts +13 -0
- package/dist/tools/task/task.d.ts.map +1 -0
- package/dist/tools/task/task.js +225 -0
- package/dist/tools/task/task.js.map +1 -0
- package/dist/tools/task/tasklist.d.ts +13 -0
- package/dist/tools/task/tasklist.d.ts.map +1 -0
- package/dist/tools/task/tasklist.js +206 -0
- package/dist/tools/task/tasklist.js.map +1 -0
- package/dist/tools/wiki/index.d.ts +11 -0
- package/dist/tools/wiki/index.d.ts.map +1 -0
- package/dist/tools/wiki/index.js +20 -0
- package/dist/tools/wiki/index.js.map +1 -0
- package/dist/tools/wiki/node.d.ts +11 -0
- package/dist/tools/wiki/node.d.ts.map +1 -0
- package/dist/tools/wiki/node.js +112 -0
- package/dist/tools/wiki/node.js.map +1 -0
- package/dist/tools/wiki/space.d.ts +11 -0
- package/dist/tools/wiki/space.d.ts.map +1 -0
- package/dist/tools/wiki/space.js +125 -0
- package/dist/tools/wiki/space.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +36 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +101 -0
- package/dist/utils/logger.js.map +1 -0
- package/eslint.config.js +13 -0
- package/package.json +54 -0
- package/skills/feishu-bitable/SKILL.md +248 -0
- package/skills/feishu-bitable/references/examples.md +813 -0
- package/skills/feishu-bitable/references/field-properties.md +763 -0
- package/skills/feishu-bitable/references/record-values.md +911 -0
- package/skills/feishu-calendar/SKILL.md +244 -0
- package/skills/feishu-channel-rules/SKILL.md +18 -0
- package/skills/feishu-channel-rules/references/markdown-syntax.md +138 -0
- package/skills/feishu-create-doc/SKILL.md +719 -0
- package/skills/feishu-fetch-doc/SKILL.md +93 -0
- package/skills/feishu-im-read/SKILL.md +163 -0
- package/skills/feishu-task/SKILL.md +293 -0
- package/skills/feishu-troubleshoot/SKILL.md +70 -0
- package/skills/feishu-update-doc/SKILL.md +285 -0
- package/src/core/api-error.ts +342 -0
- package/src/core/auth-errors.ts +27 -0
- package/src/core/config.ts +134 -0
- package/src/core/device-flow.ts +314 -0
- package/src/core/index.ts +16 -0
- package/src/core/lark-client.ts +391 -0
- package/src/core/token-store.ts +249 -0
- package/src/core/types.ts +302 -0
- package/src/core/uat-client.ts +298 -0
- package/src/core/version.ts +53 -0
- package/src/index.ts +138 -0
- package/src/tools/bitable/app.ts +390 -0
- package/src/tools/bitable/field.ts +406 -0
- package/src/tools/bitable/index.ts +43 -0
- package/src/tools/bitable/record.ts +559 -0
- package/src/tools/bitable/table.ts +472 -0
- package/src/tools/calendar/calendar.ts +254 -0
- package/src/tools/calendar/event.ts +606 -0
- package/src/tools/calendar/index.ts +41 -0
- package/src/tools/chat/chat.ts +127 -0
- package/src/tools/chat/index.ts +24 -0
- package/src/tools/chat/members.ts +93 -0
- package/src/tools/common/get-user.ts +127 -0
- package/src/tools/common/index.ts +24 -0
- package/src/tools/common/search-user.ts +99 -0
- package/src/tools/doc/create.ts +184 -0
- package/src/tools/doc/fetch.ts +149 -0
- package/src/tools/doc/index.ts +38 -0
- package/src/tools/doc/shared.ts +228 -0
- package/src/tools/doc/update.ts +240 -0
- package/src/tools/drive/file.ts +265 -0
- package/src/tools/drive/index.ts +29 -0
- package/src/tools/im/format-messages.ts +391 -0
- package/src/tools/im/helpers.ts +109 -0
- package/src/tools/im/index.ts +49 -0
- package/src/tools/im/message-read.ts +676 -0
- package/src/tools/im/message.ts +303 -0
- package/src/tools/im/resource.ts +225 -0
- package/src/tools/im/time-utils.ts +347 -0
- package/src/tools/index.ts +205 -0
- package/src/tools/oauth.ts +460 -0
- package/src/tools/search/doc-search.ts +250 -0
- package/src/tools/search/index.ts +22 -0
- package/src/tools/sheets/index.ts +22 -0
- package/src/tools/sheets/sheet.ts +382 -0
- package/src/tools/task/index.ts +34 -0
- package/src/tools/task/task.ts +265 -0
- package/src/tools/task/tasklist.ts +262 -0
- package/src/tools/wiki/index.ts +24 -0
- package/src/tools/wiki/node.ts +131 -0
- package/src/tools/wiki/space.ts +152 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/logger.ts +132 -0
- package/tests/core/config.test.ts +238 -0
- package/tests/core/device-flow.test.ts +490 -0
- package/tests/core/lark-client.test.ts +378 -0
- package/tests/core/token-store.test.ts +438 -0
- package/tests/index.test.ts +360 -0
- package/tests/tools/doc/create.test.ts +224 -0
- package/tests/tools/doc/fetch.test.ts +182 -0
- package/tests/tools/doc/shared.test.ts +183 -0
- package/tests/tools/doc/update.test.ts +330 -0
- package/tests/tools/im/format-messages.test.ts +184 -0
- package/tests/tools/im/time-utils.test.ts +178 -0
- package/tests/utils/logger.test.ts +140 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* feishu_bitable_record tool - Manage Feishu Bitable records.
|
|
6
|
+
*
|
|
7
|
+
* Actions: create, list, update, delete, batch_create, batch_update, batch_delete
|
|
8
|
+
*
|
|
9
|
+
* Uses the Feishu Bitable v1 API:
|
|
10
|
+
* - create: POST /open-apis/bitable/v1/apps/:app_token/tables/:table_id/records
|
|
11
|
+
* - list: POST /open-apis/bitable/v1/apps/:app_token/tables/:table_id/records/search
|
|
12
|
+
* - update: PUT /open-apis/bitable/v1/apps/:app_token/tables/:table_id/records/:record_id
|
|
13
|
+
* - delete: DELETE /open-apis/bitable/v1/apps/:app_token/tables/:table_id/records/:record_id
|
|
14
|
+
* - batch_create: POST /open-apis/bitable/v1/apps/:app_token/tables/:table_id/records/batch_create
|
|
15
|
+
* - batch_update: POST /open-apis/bitable/v1/apps/:app_token/tables/:table_id/records/batch_update
|
|
16
|
+
* - batch_delete: POST /open-apis/bitable/v1/apps/:app_token/tables/:table_id/records/batch_delete
|
|
17
|
+
*
|
|
18
|
+
* Adapted from openclaw-lark for MCP Server architecture.
|
|
19
|
+
*/
|
|
20
|
+
import { z } from 'zod';
|
|
21
|
+
import { getValidAccessToken, NeedAuthorizationError } from '../../core/uat-client.js';
|
|
22
|
+
import { assertLarkOk } from '../../core/api-error.js';
|
|
23
|
+
import { json, jsonError } from '../im/helpers.js';
|
|
24
|
+
import { logger } from '../../utils/logger.js';
|
|
25
|
+
const log = logger('tools:bitable:record');
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Input schemas
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
const filterConditionSchema = z.object({
|
|
30
|
+
field_name: z.string().describe('Field name'),
|
|
31
|
+
operator: z.enum(['is', 'isNot', 'contains', 'doesNotContain', 'isEmpty', 'isNotEmpty', 'isGreater', 'isGreaterEqual', 'isLess', 'isLessEqual']).describe('Filter operator'),
|
|
32
|
+
value: z.array(z.string()).optional().describe('Filter value (omit for isEmpty/isNotEmpty)'),
|
|
33
|
+
});
|
|
34
|
+
const filterSchema = z.object({
|
|
35
|
+
conjunction: z.enum(['and', 'or']).describe('Filter conjunction: and (all match) or or (any match)'),
|
|
36
|
+
conditions: z.array(filterConditionSchema).describe('Filter conditions'),
|
|
37
|
+
});
|
|
38
|
+
const sortSchema = z.object({
|
|
39
|
+
field_name: z.string().describe('Sort field name'),
|
|
40
|
+
desc: z.boolean().describe('Sort descending'),
|
|
41
|
+
});
|
|
42
|
+
const createActionSchema = {
|
|
43
|
+
action: z.literal('create').describe('Create a single record'),
|
|
44
|
+
app_token: z.string().describe('Bitable app token'),
|
|
45
|
+
table_id: z.string().describe('Table ID'),
|
|
46
|
+
fields: z.record(z.any()).describe('Record fields (key=field name, value depends on field type)'),
|
|
47
|
+
};
|
|
48
|
+
const listActionSchema = {
|
|
49
|
+
action: z.literal('list').describe('List/search records'),
|
|
50
|
+
app_token: z.string().describe('Bitable app token'),
|
|
51
|
+
table_id: z.string().describe('Table ID'),
|
|
52
|
+
view_id: z.string().optional().describe('View ID (optional, recommended for better performance)'),
|
|
53
|
+
field_names: z.array(z.string()).optional().describe('Field names to return (optional, returns all if not specified)'),
|
|
54
|
+
filter: filterSchema.optional().describe('Filter conditions'),
|
|
55
|
+
sort: z.array(sortSchema).optional().describe('Sort rules'),
|
|
56
|
+
automatic_fields: z.boolean().optional().describe('Return automatic fields (created_time, last_modified_time, etc.)'),
|
|
57
|
+
page_size: z.number().min(1).max(500).optional().describe('Page size (default 50)'),
|
|
58
|
+
page_token: z.string().optional().describe('Pagination token'),
|
|
59
|
+
};
|
|
60
|
+
const updateActionSchema = {
|
|
61
|
+
action: z.literal('update').describe('Update a single record'),
|
|
62
|
+
app_token: z.string().describe('Bitable app token'),
|
|
63
|
+
table_id: z.string().describe('Table ID'),
|
|
64
|
+
record_id: z.string().describe('Record ID'),
|
|
65
|
+
fields: z.record(z.any()).describe('Fields to update'),
|
|
66
|
+
};
|
|
67
|
+
const deleteActionSchema = {
|
|
68
|
+
action: z.literal('delete').describe('Delete a single record'),
|
|
69
|
+
app_token: z.string().describe('Bitable app token'),
|
|
70
|
+
table_id: z.string().describe('Table ID'),
|
|
71
|
+
record_id: z.string().describe('Record ID'),
|
|
72
|
+
};
|
|
73
|
+
const batchCreateActionSchema = {
|
|
74
|
+
action: z.literal('batch_create').describe('Create multiple records at once (max 500)'),
|
|
75
|
+
app_token: z.string().describe('Bitable app token'),
|
|
76
|
+
table_id: z.string().describe('Table ID'),
|
|
77
|
+
records: z.array(z.object({ fields: z.record(z.any()) })).max(500).describe('Records to create'),
|
|
78
|
+
};
|
|
79
|
+
const batchUpdateActionSchema = {
|
|
80
|
+
action: z.literal('batch_update').describe('Update multiple records at once (max 500)'),
|
|
81
|
+
app_token: z.string().describe('Bitable app token'),
|
|
82
|
+
table_id: z.string().describe('Table ID'),
|
|
83
|
+
records: z.array(z.object({ record_id: z.string(), fields: z.record(z.any()) })).max(500).describe('Records to update'),
|
|
84
|
+
};
|
|
85
|
+
const batchDeleteActionSchema = {
|
|
86
|
+
action: z.literal('batch_delete').describe('Delete multiple records at once (max 500)'),
|
|
87
|
+
app_token: z.string().describe('Bitable app token'),
|
|
88
|
+
table_id: z.string().describe('Table ID'),
|
|
89
|
+
record_ids: z.array(z.string()).max(500).describe('Record IDs to delete'),
|
|
90
|
+
};
|
|
91
|
+
// ---------------------------------------------------------------------------
|
|
92
|
+
// Tool registration
|
|
93
|
+
// ---------------------------------------------------------------------------
|
|
94
|
+
export function registerBitableRecordTool(registry) {
|
|
95
|
+
// Create single record
|
|
96
|
+
registry.register({
|
|
97
|
+
name: 'feishu_bitable_record_create',
|
|
98
|
+
description: [
|
|
99
|
+
'Create a single record in a Feishu Bitable table.',
|
|
100
|
+
'',
|
|
101
|
+
'Parameters:',
|
|
102
|
+
'- app_token: Bitable app token',
|
|
103
|
+
'- table_id: Table ID',
|
|
104
|
+
'- fields: Record fields as key-value pairs',
|
|
105
|
+
'',
|
|
106
|
+
'Returns the created record.',
|
|
107
|
+
'Requires OAuth authorization.',
|
|
108
|
+
].join('\n'),
|
|
109
|
+
inputSchema: createActionSchema,
|
|
110
|
+
handler: async (args, context) => handleCreate(args, context),
|
|
111
|
+
});
|
|
112
|
+
// List/search records
|
|
113
|
+
registry.register({
|
|
114
|
+
name: 'feishu_bitable_record_list',
|
|
115
|
+
description: [
|
|
116
|
+
'List or search records in a Feishu Bitable table.',
|
|
117
|
+
'',
|
|
118
|
+
'Parameters:',
|
|
119
|
+
'- app_token: Bitable app token',
|
|
120
|
+
'- table_id: Table ID',
|
|
121
|
+
'- view_id: View ID (optional)',
|
|
122
|
+
'- field_names: Field names to return (optional)',
|
|
123
|
+
'- filter: Filter conditions (optional)',
|
|
124
|
+
'- sort: Sort rules (optional)',
|
|
125
|
+
'- automatic_fields: Return automatic fields (optional)',
|
|
126
|
+
'- page_size: Page size (default 50)',
|
|
127
|
+
'- page_token: Pagination token',
|
|
128
|
+
'',
|
|
129
|
+
'Returns list of records.',
|
|
130
|
+
'Requires OAuth authorization.',
|
|
131
|
+
].join('\n'),
|
|
132
|
+
inputSchema: listActionSchema,
|
|
133
|
+
handler: async (args, context) => handleList(args, context),
|
|
134
|
+
});
|
|
135
|
+
// Update single record
|
|
136
|
+
registry.register({
|
|
137
|
+
name: 'feishu_bitable_record_update',
|
|
138
|
+
description: [
|
|
139
|
+
'Update a single record in a Feishu Bitable table.',
|
|
140
|
+
'',
|
|
141
|
+
'Parameters:',
|
|
142
|
+
'- app_token: Bitable app token',
|
|
143
|
+
'- table_id: Table ID',
|
|
144
|
+
'- record_id: Record ID',
|
|
145
|
+
'- fields: Fields to update',
|
|
146
|
+
'',
|
|
147
|
+
'Returns the updated record.',
|
|
148
|
+
'Requires OAuth authorization.',
|
|
149
|
+
].join('\n'),
|
|
150
|
+
inputSchema: updateActionSchema,
|
|
151
|
+
handler: async (args, context) => handleUpdate(args, context),
|
|
152
|
+
});
|
|
153
|
+
// Delete single record
|
|
154
|
+
registry.register({
|
|
155
|
+
name: 'feishu_bitable_record_delete',
|
|
156
|
+
description: [
|
|
157
|
+
'Delete a single record from a Feishu Bitable table.',
|
|
158
|
+
'',
|
|
159
|
+
'Parameters:',
|
|
160
|
+
'- app_token: Bitable app token',
|
|
161
|
+
'- table_id: Table ID',
|
|
162
|
+
'- record_id: Record ID',
|
|
163
|
+
'',
|
|
164
|
+
'Returns success status.',
|
|
165
|
+
'Requires OAuth authorization.',
|
|
166
|
+
].join('\n'),
|
|
167
|
+
inputSchema: deleteActionSchema,
|
|
168
|
+
handler: async (args, context) => handleDelete(args, context),
|
|
169
|
+
});
|
|
170
|
+
// Batch create records
|
|
171
|
+
registry.register({
|
|
172
|
+
name: 'feishu_bitable_record_batch_create',
|
|
173
|
+
description: [
|
|
174
|
+
'Create multiple records in a Feishu Bitable table at once (max 500).',
|
|
175
|
+
'',
|
|
176
|
+
'Parameters:',
|
|
177
|
+
'- app_token: Bitable app token',
|
|
178
|
+
'- table_id: Table ID',
|
|
179
|
+
'- records: Array of records to create',
|
|
180
|
+
'',
|
|
181
|
+
'Returns created records.',
|
|
182
|
+
'Requires OAuth authorization.',
|
|
183
|
+
].join('\n'),
|
|
184
|
+
inputSchema: batchCreateActionSchema,
|
|
185
|
+
handler: async (args, context) => handleBatchCreate(args, context),
|
|
186
|
+
});
|
|
187
|
+
// Batch update records
|
|
188
|
+
registry.register({
|
|
189
|
+
name: 'feishu_bitable_record_batch_update',
|
|
190
|
+
description: [
|
|
191
|
+
'Update multiple records in a Feishu Bitable table at once (max 500).',
|
|
192
|
+
'',
|
|
193
|
+
'Parameters:',
|
|
194
|
+
'- app_token: Bitable app token',
|
|
195
|
+
'- table_id: Table ID',
|
|
196
|
+
'- records: Array of records to update with record_id and fields',
|
|
197
|
+
'',
|
|
198
|
+
'Returns updated records.',
|
|
199
|
+
'Requires OAuth authorization.',
|
|
200
|
+
].join('\n'),
|
|
201
|
+
inputSchema: batchUpdateActionSchema,
|
|
202
|
+
handler: async (args, context) => handleBatchUpdate(args, context),
|
|
203
|
+
});
|
|
204
|
+
// Batch delete records
|
|
205
|
+
registry.register({
|
|
206
|
+
name: 'feishu_bitable_record_batch_delete',
|
|
207
|
+
description: [
|
|
208
|
+
'Delete multiple records from a Feishu Bitable table at once (max 500).',
|
|
209
|
+
'',
|
|
210
|
+
'Parameters:',
|
|
211
|
+
'- app_token: Bitable app token',
|
|
212
|
+
'- table_id: Table ID',
|
|
213
|
+
'- record_ids: Array of record IDs to delete',
|
|
214
|
+
'',
|
|
215
|
+
'Returns success status.',
|
|
216
|
+
'Requires OAuth authorization.',
|
|
217
|
+
].join('\n'),
|
|
218
|
+
inputSchema: batchDeleteActionSchema,
|
|
219
|
+
handler: async (args, context) => handleBatchDelete(args, context),
|
|
220
|
+
});
|
|
221
|
+
log.debug('feishu_bitable_record tools registered');
|
|
222
|
+
}
|
|
223
|
+
// ---------------------------------------------------------------------------
|
|
224
|
+
// Helpers
|
|
225
|
+
// ---------------------------------------------------------------------------
|
|
226
|
+
async function getAccessToken(context) {
|
|
227
|
+
const { larkClient, config } = context;
|
|
228
|
+
if (!larkClient) {
|
|
229
|
+
return jsonError('LarkClient not initialized. Check FEISHU_APP_ID and FEISHU_APP_SECRET.');
|
|
230
|
+
}
|
|
231
|
+
const { appId, appSecret, brand } = config;
|
|
232
|
+
if (!appId || !appSecret) {
|
|
233
|
+
return jsonError('Missing FEISHU_APP_ID or FEISHU_APP_SECRET.');
|
|
234
|
+
}
|
|
235
|
+
const { listStoredTokens } = await import('../../core/token-store.js');
|
|
236
|
+
const tokens = await listStoredTokens(appId);
|
|
237
|
+
if (tokens.length === 0) {
|
|
238
|
+
return jsonError('No user authorization found. Please use the feishu_oauth tool with action="authorize" to authorize a user first.');
|
|
239
|
+
}
|
|
240
|
+
const userOpenId = tokens[0].userOpenId;
|
|
241
|
+
try {
|
|
242
|
+
return await getValidAccessToken({
|
|
243
|
+
userOpenId,
|
|
244
|
+
appId,
|
|
245
|
+
appSecret,
|
|
246
|
+
domain: brand ?? 'feishu',
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
catch (err) {
|
|
250
|
+
if (err instanceof NeedAuthorizationError) {
|
|
251
|
+
return jsonError(`User authorization required or expired. Please use feishu_oauth tool with action="authorize" to re-authorize.`, { userOpenId });
|
|
252
|
+
}
|
|
253
|
+
throw err;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// ---------------------------------------------------------------------------
|
|
257
|
+
// Handlers
|
|
258
|
+
// ---------------------------------------------------------------------------
|
|
259
|
+
async function handleCreate(args, context) {
|
|
260
|
+
const p = args;
|
|
261
|
+
const { larkClient } = context;
|
|
262
|
+
if (!p.fields || Object.keys(p.fields).length === 0) {
|
|
263
|
+
return jsonError('fields is required and cannot be empty');
|
|
264
|
+
}
|
|
265
|
+
const accessTokenResult = await getAccessToken(context);
|
|
266
|
+
if (typeof accessTokenResult === 'object' && 'content' in accessTokenResult) {
|
|
267
|
+
return accessTokenResult;
|
|
268
|
+
}
|
|
269
|
+
const accessToken = accessTokenResult;
|
|
270
|
+
log.info(`create: app_token=${p.app_token}, table_id=${p.table_id}`);
|
|
271
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
272
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
273
|
+
const res = await larkClient.sdk.bitable.appTableRecord.create({
|
|
274
|
+
path: { app_token: p.app_token, table_id: p.table_id },
|
|
275
|
+
params: { user_id_type: 'open_id' },
|
|
276
|
+
data: { fields: p.fields },
|
|
277
|
+
}, opts);
|
|
278
|
+
assertLarkOk(res);
|
|
279
|
+
log.info(`create: created record ${res.data?.record?.record_id}`);
|
|
280
|
+
return json({ record: res.data?.record });
|
|
281
|
+
}
|
|
282
|
+
async function handleList(args, context) {
|
|
283
|
+
const p = args;
|
|
284
|
+
const { larkClient } = context;
|
|
285
|
+
const accessTokenResult = await getAccessToken(context);
|
|
286
|
+
if (typeof accessTokenResult === 'object' && 'content' in accessTokenResult) {
|
|
287
|
+
return accessTokenResult;
|
|
288
|
+
}
|
|
289
|
+
const accessToken = accessTokenResult;
|
|
290
|
+
log.info(`list: app_token=${p.app_token}, table_id=${p.table_id}, view_id=${p.view_id ?? 'none'}, filter=${p.filter ? 'yes' : 'no'}`);
|
|
291
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
292
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
293
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
294
|
+
const searchData = {};
|
|
295
|
+
if (p.view_id !== undefined)
|
|
296
|
+
searchData.view_id = p.view_id;
|
|
297
|
+
if (p.field_names !== undefined)
|
|
298
|
+
searchData.field_names = p.field_names;
|
|
299
|
+
// Handle isEmpty/isNotEmpty operators - they need empty value array
|
|
300
|
+
if (p.filter !== undefined) {
|
|
301
|
+
const filter = { ...p.filter };
|
|
302
|
+
if (filter.conditions) {
|
|
303
|
+
filter.conditions = filter.conditions.map((cond) => {
|
|
304
|
+
if ((cond.operator === 'isEmpty' || cond.operator === 'isNotEmpty') && !cond.value) {
|
|
305
|
+
log.warn(`list: ${cond.operator} operator detected without value. Auto-adding value=[] to avoid API error.`);
|
|
306
|
+
return { ...cond, value: [] };
|
|
307
|
+
}
|
|
308
|
+
return cond;
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
searchData.filter = filter;
|
|
312
|
+
}
|
|
313
|
+
if (p.sort !== undefined)
|
|
314
|
+
searchData.sort = p.sort;
|
|
315
|
+
if (p.automatic_fields !== undefined)
|
|
316
|
+
searchData.automatic_fields = p.automatic_fields;
|
|
317
|
+
const res = await larkClient.sdk.bitable.appTableRecord.search({
|
|
318
|
+
path: { app_token: p.app_token, table_id: p.table_id },
|
|
319
|
+
params: {
|
|
320
|
+
user_id_type: 'open_id',
|
|
321
|
+
page_size: p.page_size,
|
|
322
|
+
page_token: p.page_token,
|
|
323
|
+
},
|
|
324
|
+
data: searchData,
|
|
325
|
+
}, opts);
|
|
326
|
+
assertLarkOk(res);
|
|
327
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
328
|
+
const data = res.data;
|
|
329
|
+
log.info(`list: returned ${data?.items?.length ?? 0} records`);
|
|
330
|
+
return json({
|
|
331
|
+
records: data?.items,
|
|
332
|
+
has_more: data?.has_more ?? false,
|
|
333
|
+
page_token: data?.page_token,
|
|
334
|
+
total: data?.total,
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
async function handleUpdate(args, context) {
|
|
338
|
+
const p = args;
|
|
339
|
+
const { larkClient } = context;
|
|
340
|
+
const accessTokenResult = await getAccessToken(context);
|
|
341
|
+
if (typeof accessTokenResult === 'object' && 'content' in accessTokenResult) {
|
|
342
|
+
return accessTokenResult;
|
|
343
|
+
}
|
|
344
|
+
const accessToken = accessTokenResult;
|
|
345
|
+
log.info(`update: app_token=${p.app_token}, table_id=${p.table_id}, record_id=${p.record_id}`);
|
|
346
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
347
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
348
|
+
const res = await larkClient.sdk.bitable.appTableRecord.update({
|
|
349
|
+
path: { app_token: p.app_token, table_id: p.table_id, record_id: p.record_id },
|
|
350
|
+
params: { user_id_type: 'open_id' },
|
|
351
|
+
data: { fields: p.fields },
|
|
352
|
+
}, opts);
|
|
353
|
+
assertLarkOk(res);
|
|
354
|
+
log.info(`update: updated record ${p.record_id}`);
|
|
355
|
+
return json({ record: res.data?.record });
|
|
356
|
+
}
|
|
357
|
+
async function handleDelete(args, context) {
|
|
358
|
+
const p = args;
|
|
359
|
+
const { larkClient } = context;
|
|
360
|
+
const accessTokenResult = await getAccessToken(context);
|
|
361
|
+
if (typeof accessTokenResult === 'object' && 'content' in accessTokenResult) {
|
|
362
|
+
return accessTokenResult;
|
|
363
|
+
}
|
|
364
|
+
const accessToken = accessTokenResult;
|
|
365
|
+
log.info(`delete: app_token=${p.app_token}, table_id=${p.table_id}, record_id=${p.record_id}`);
|
|
366
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
367
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
368
|
+
const res = await larkClient.sdk.bitable.appTableRecord.delete({
|
|
369
|
+
path: { app_token: p.app_token, table_id: p.table_id, record_id: p.record_id },
|
|
370
|
+
}, opts);
|
|
371
|
+
assertLarkOk(res);
|
|
372
|
+
log.info(`delete: deleted record ${p.record_id}`);
|
|
373
|
+
return json({ success: true });
|
|
374
|
+
}
|
|
375
|
+
async function handleBatchCreate(args, context) {
|
|
376
|
+
const p = args;
|
|
377
|
+
const { larkClient } = context;
|
|
378
|
+
const accessTokenResult = await getAccessToken(context);
|
|
379
|
+
if (typeof accessTokenResult === 'object' && 'content' in accessTokenResult) {
|
|
380
|
+
return accessTokenResult;
|
|
381
|
+
}
|
|
382
|
+
const accessToken = accessTokenResult;
|
|
383
|
+
log.info(`batch_create: app_token=${p.app_token}, table_id=${p.table_id}, records_count=${p.records.length}`);
|
|
384
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
385
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
386
|
+
const res = await larkClient.sdk.bitable.appTableRecord.batchCreate({
|
|
387
|
+
path: { app_token: p.app_token, table_id: p.table_id },
|
|
388
|
+
params: { user_id_type: 'open_id' },
|
|
389
|
+
data: { records: p.records },
|
|
390
|
+
}, opts);
|
|
391
|
+
assertLarkOk(res);
|
|
392
|
+
log.info(`batch_create: created ${p.records.length} records`);
|
|
393
|
+
return json({ records: res.data?.records });
|
|
394
|
+
}
|
|
395
|
+
async function handleBatchUpdate(args, context) {
|
|
396
|
+
const p = args;
|
|
397
|
+
const { larkClient } = context;
|
|
398
|
+
const accessTokenResult = await getAccessToken(context);
|
|
399
|
+
if (typeof accessTokenResult === 'object' && 'content' in accessTokenResult) {
|
|
400
|
+
return accessTokenResult;
|
|
401
|
+
}
|
|
402
|
+
const accessToken = accessTokenResult;
|
|
403
|
+
log.info(`batch_update: app_token=${p.app_token}, table_id=${p.table_id}, records_count=${p.records.length}`);
|
|
404
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
405
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
406
|
+
const res = await larkClient.sdk.bitable.appTableRecord.batchUpdate({
|
|
407
|
+
path: { app_token: p.app_token, table_id: p.table_id },
|
|
408
|
+
params: { user_id_type: 'open_id' },
|
|
409
|
+
data: { records: p.records },
|
|
410
|
+
}, opts);
|
|
411
|
+
assertLarkOk(res);
|
|
412
|
+
log.info(`batch_update: updated ${p.records.length} records`);
|
|
413
|
+
return json({ records: res.data?.records });
|
|
414
|
+
}
|
|
415
|
+
async function handleBatchDelete(args, context) {
|
|
416
|
+
const p = args;
|
|
417
|
+
const { larkClient } = context;
|
|
418
|
+
const accessTokenResult = await getAccessToken(context);
|
|
419
|
+
if (typeof accessTokenResult === 'object' && 'content' in accessTokenResult) {
|
|
420
|
+
return accessTokenResult;
|
|
421
|
+
}
|
|
422
|
+
const accessToken = accessTokenResult;
|
|
423
|
+
log.info(`batch_delete: app_token=${p.app_token}, table_id=${p.table_id}, record_ids_count=${p.record_ids.length}`);
|
|
424
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
425
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
426
|
+
const res = await larkClient.sdk.bitable.appTableRecord.batchDelete({
|
|
427
|
+
path: { app_token: p.app_token, table_id: p.table_id },
|
|
428
|
+
data: { records: p.record_ids },
|
|
429
|
+
}, opts);
|
|
430
|
+
assertLarkOk(res);
|
|
431
|
+
log.info(`batch_delete: deleted ${p.record_ids.length} records`);
|
|
432
|
+
return json({ success: true });
|
|
433
|
+
}
|
|
434
|
+
//# sourceMappingURL=record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../../src/tools/bitable/record.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* feishu_bitable_table tool - Manage Feishu Bitable tables.
|
|
6
|
+
*
|
|
7
|
+
* Actions: create, list, patch, delete, batch_create, batch_delete
|
|
8
|
+
*
|
|
9
|
+
* Uses the Feishu Bitable v1 API:
|
|
10
|
+
* - create: POST /open-apis/bitable/v1/apps/:app_token/tables
|
|
11
|
+
* - list: GET /open-apis/bitable/v1/apps/:app_token/tables
|
|
12
|
+
* - patch: PATCH /open-apis/bitable/v1/apps/:app_token/tables/:table_id
|
|
13
|
+
* - delete: DELETE /open-apis/bitable/v1/apps/:app_token/tables/:table_id
|
|
14
|
+
* - batch_create: POST /open-apis/bitable/v1/apps/:app_token/tables/batch_create
|
|
15
|
+
* - batch_delete: POST /open-apis/bitable/v1/apps/:app_token/tables/batch_delete
|
|
16
|
+
*
|
|
17
|
+
* Adapted from openclaw-lark for MCP Server architecture.
|
|
18
|
+
*/
|
|
19
|
+
import type { ToolRegistry } from '../index.js';
|
|
20
|
+
export declare function registerBitableTableTool(registry: ToolRegistry): void;
|
|
21
|
+
//# sourceMappingURL=table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/tools/bitable/table.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAmEhD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAoGrE"}
|