mcpField
F
feishu-bitable

feishu-bitable

github.com/alextangsonデータ・データベース64864 回インストール31 週間前に更新
リポジトリ

feishu-bitable について

feishu-bitableは、Feishu Bitable APIで多次元テーブルを操作するスキルです。プログラムからデータや構造を管理するユーザー向けに、レコード、フィールド、テーブル、ビュー、権限を扱います。

主な機能

  1. 01レコードの作成・検索・更新・削除
  2. 02フィールドと種類の管理
  3. 03テーブルの作成・複製・削除
  4. 04テーブルビューの作成・削除
  5. 05共同編集者と権限の管理

活用シーン

  1. 01レコードの一括登録や更新
  2. 02条件指定とページングによるレコード取得
  3. 03フィールドやテーブル構造の変更
  4. 04共同編集者の追加と権限設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/alextangson/feishu_skills --skill feishu-bitable

インストール後、Claude Code で/feishu-bitableを入力して読み込まれたか確認します。

詳細

Feishu 多维表格

通过 Bitable API 操作数据、字段、视图和权限。

Base URL: https://open.feishu.cn/open-apis/bitable/v1

認証と Token の取得

feishu_skills のルートディレクトリから共有スクリプトを実行します。

TOKEN="$(./scripts/get_feishu_token.sh)"

リクエストヘッダーでは、常に Authorization: Bearer ${TOKEN} を使用します。

業務 API からトークンが無効、期限切れ、または 401 と返された場合、強制的に更新して、元のリクエストを一度だけ再試行します。

TOKEN="$(./scripts/get_feishu_token.sh --force-refresh)"

環境変数:

  • FEISHU_APP_ID
  • FEISHU_APP_SECRET

ローカルキャッシュ: ./.feishu_token_cache.json(期限内であれば再利用し、デフォルトでは期限の 5 分前に更新します)

主なパラメーター:

  • app_token: 多次元テーブルの URL の /base/ に続く文字列
  • table_id: リスト API の呼び出しで取得します

レコード操作

APIエンドポイント説明
1 件追加POST /apps/{app_token}/tables/{table_id}/records-
一括追加POST .../records/batch_create最大 500 件、Upsert に対応
更新PUT .../records/{record_id}-
一括更新POST .../records/batch_update最大 500 件
一括削除POST .../records/batch_delete最大 500 件
検索POST .../records/searchfilter/sort/ページネーションに対応

すべてのレコードをページネーションで取得(1 回あたり最大 500 件。has_more: false になるまで繰り返します):

page_token = None
all_records = []
while True:
    body = {"page_size": 500}
    if page_token:
        body["page_token"] = page_token
    resp = post(".../records/search", json=body)
    all_records.extend(resp["data"]["items"])
    if not resp["data"].get("has_more"):
        break
    page_token = resp["data"]["page_token"]

リクエスト例:

{
  "fields": {
    "名称": "测试",
    "金额": 100,
    "进度": 0.75,
    "评分": 4,
    "日期": 1770508800000,
    "状态": "进行中",
    "标签": ["重要", "紧急"],
    "完成": true,
    "负责人": [{"id": "ou_xxx"}],
    "电话": "13800138000",
    "链接": {"text": "官网", "link": "https://example.com"}
  }
}

⚠️ 数値を文字列として渡さないでください。日付には 13 桁のミリ秒タイムスタンプを指定する必要があります。


フィールド型の形式

typeui_type日本語名書き込み形式例
1Text複数行テキスト文字列"办公用品"
1Emailメールアドレス文字列"[email protected]"
2Number数値数値100
2Currency通貨数値1280.50
2Progress進捗数値(0~1)0.25(25%)
2Rating評価数値(1~5)3
3SingleSelect単一選択文字列"支出"(選択肢を自動作成)
4MultiSelect複数選択文字列配列["餐饮","交通"]
5DateTime日付ミリ秒タイムスタンプ1770508800000
7Checkboxチェックボックスブール値true
11Userユーザーオブジェクト配列[{"id":"ou_xxx"}]
13Phone電話番号文字列"13800138000"
15Urlハイパーリンクオブジェクト{"text":"名称","link":"https://..."}
17Attachment添付ファイルオブジェクト配列[{"file_token":"xxx"}]
18SingleLink一方向リンク文字列配列["recuxxx"]
21DuplexLink双方向リンク文字列配列["recuxxx"]
22Location位置情報文字列"116.397,39.903"

API による書き込みに非対応: 数式、ルックアップ、作成日時、更新者、自動採番

日付形式の変換:

import datetime
ts = int(datetime.datetime(2026, 2, 9).timestamp() * 1000)
# → 1770508800000

フィールド管理

APIエンドポイント説明
フィールド一覧を取得GET .../fieldstype と ui_name を返します
フィールドを追加POST .../fields{"field_name":"新字段","type":1}
フィールドを更新PUT .../fields/{field_id}単一選択を変更する場合は、property 全体を指定する必要があります
フィールドを削除DELETE .../fields/{field_id}-

数式フィールドの例:

{
  "type": 20,
  "field_name": "利润",
  "property": {"formula_expression": "[营收]-[成本]"}
}

リンクフィールドの例:

{
  "type": 18,
  "field_name": "关联客户",
  "property": {"table_id": "tblXXX", "multiple": true}
}

データテーブル管理

APIエンドポイント説明
多次元テーブルを作成POST /apps{"name":"数据库名称"}
データテーブル一覧を取得GET /apps/{app_token}/tables-
データテーブルを追加POST /apps/{app_token}/tables{"table":{"name":"表名"}}
テーブルを一括追加POST .../tables/batch_create最大 10 テーブル
データテーブルを削除DELETE .../tables/{table_id}-
データテーブルを複製POST .../tables/{table_id}/copy-

⚠️ 権限管理(重要):

  • API で作成したテーブルは、デフォルトではボットからのみ表示できます
  • 作成後、ユーザーを共同編集者として追加する必要があります:
POST /permissions/{app_token}/members
{
  "member_type": "user",
  "member_id": "ou_xxx",
  "perm": "full_access"
}
  • 権限の種類:view / edit / full_access

ビュー管理

APIエンドポイント説明
ビュー一覧を取得GET .../tables/{table_id}/views-
ビューを作成POST .../tables/{table_id}/views{"view_name":"新视图","view_type":"grid"}
ビューを削除DELETE .../views/{view_id}-

ビューの種類: grid(テーブル) / kanban(カンバン) / gallery(ギャラリー) / gantt(ガントチャート)


権限管理

APIエンドポイント説明
共同編集者を作成POST /apps/{app_token}/roles/{role_id}/members/batch_create-
共同編集者を削除POST .../members/batch_delete-
権限を更新PUT /apps/{app_token}/roles/{role_id}-

ロールの種類: owner / editor / reader


⚠️ 存在しないインターフェース

/apps/:app_token/tables/:table_id/statistics このインターフェースは存在しません。Feishu の公式ドキュメントには、統計集計 API がありません。

統計データ(合計や件数など)が必要な場合は、次の方法をおすすめします。

  1. POST .../records/search で全レコードを取得し、クライアント側で計算する
  2. 多次元テーブルに数式フィールド(SUM、COUNT など)を作成し、API でフィールド値を読み取る

ベストプラクティス

  1. 一括操作を優先する(API 呼び出しを削減できます)
  2. フィールド型を厳密に合わせる(書き込みエラーを防げます)
  3. 日付にはミリ秒タイムスタンプを使用する(Python: int(datetime.timestamp() * 1000))
  4. リンクフィールドでリレーショナル機能を実現する
  5. テーブルの作成後、すぐにユーザーを共同編集者として追加する(表示されない状態を防げます)
  6. 単一選択フィールドの選択肢は自動作成される(選択肢のテキストをそのまま書き込めます)

テスト検証

実機テストで検証済みの 15 種類のフィールド型:

  • テキスト、進捗、複数選択、単一選択、日付、チェックボックス、電話番号、ユーザー、ハイパーリンク
  • メールアドレス、通貨、評価、位置情報、一方向リンク、双方向リンク

テスト用テーブル:https://jvbmlo28x0.feishu.cn/base/YdOpb47PvalSbQsHPyXc7LrNnUh

コメント