A side-by-side look at the Feishu User Plugin and Keepsake MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Feishu User Plugin for workplace & productivity work as a local process; choose Keepsake MCP for workplace & productivity as a local process. You can also run both side by side in one mcpServers block.
LARK_COOKIE, LARK_APP_ID, LARK_APP_SECRET, LARK_USER_ACCESS_TOKEN, LARK_USER_REFRESH_TOKEN.manage_bitable_app, manage_bitable_table, manage_bitable_field.KEEPSAKE_API_KEY.list_contacts, get_contact, create_contact.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Workplace & Productivity | Workplace & Productivity |
| Quality signal | 63/100 · Good | 60/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | API key required |
| Pricing | Not declared | BYOK (pay the provider) |
| Required env vars | LARK_COOKIELARK_APP_IDLARK_APP_SECRETLARK_USER_ACCESS_TOKENLARK_USER_REFRESH_TOKEN | KEEPSAKE_API_KEY |
| Verified owner | Community listing | Community listing |
| GitHub stars | 10 | 1 |
| Directory activity | 1 views 0 installs 0 upvotes | 3 views 0 installs 0 upvotes |
| Tools | 85 | 80 |
| Full listing | View Feishu User Plugin | View Keepsake MCP |
manage_bitable_app[Official API] Manage a Bitable app. action=create (new app, optional wiki_space_id to attach), copy (duplicate an existing app), get_meta (read app metadata).manage_bitable_table[Official API] Manage a table inside a Bitable app. action=list, create (with optional initial fields), update (rename), delete.manage_bitable_field[Official API] Manage fields (columns) inside a Bitable table. action=list, create, update (Feishu requires `type` even when only renaming), delete.manage_bitable_view[Official API] Manage views inside a Bitable table. action=list, create, delete. (Feishu open API does not expose view update — recreate with a new name to change.)manage_bitable_record[Official API] Manage records (rows) inside a Bitable table. action=search, get, create, update, delete. create/update/delete accept arrays — single record or up to 500.list_calendars[Official API + UAT] List the current user's calendars (primary + shared + subscribed). Requires UAT — app identity only sees calendars it was explicitly invited to. Requires `calendar:calendar:readonly` scope on the OAuth.list_calendar_events[Official API + UAT] List events in a calendar within an optional time range. Typical usage: first list_calendars to find calendar_id (primary calendar has type="primary"), then list events in e.g. [now, now+7d] (Unix seconds).get_calendar_event[Official API + UAT] Get full details of a single calendar event (summary, description, start/end, attendees, location, attachments, meeting link).create_calendar_event[Official API + UAT, v1.3.7] Create a new calendar event. Requires `calendar:calendar.event:create` scope (re-run `npx feishu-user-plugin oauth` after enabling). The current identity (UAT-first) must have writer or owner permission on the calendar.
Time fields: A time object: {timestamp:"<unix-seconds>", timezone?:"Asia/Shanghai"} OR {date:"YYYY-MM-DD"} for all-day events.update_calendar_event[Official API + UAT, v1.3.7] Patch fields on an existing calendar event. Pass only the fields you want to change. Requires `calendar:calendar.event:update` scope.delete_calendar_event[Official API + UAT, v1.3.7] Delete a calendar event. Requires `calendar:calendar.event:delete` scope.respond_calendar_event[Official API + UAT, v1.3.7] Respond to an event invitation. The current identity must be in the event's attendee list. Requires `calendar:calendar.event:reply` scope.list_contactsList contacts with pagination, sorting, field selection and filters (linked company, has_company, updated_since)get_contactGet a contact with recent interactions, tags, and statscreate_contactCreate a new contact (`company` links it to a company record, created if missing)update_contactUpdate contact fieldsdelete_contactPermanently delete a contactsearch_contactsAccent-insensitive search by name, email, notes, phone and linked company namesget_contact_timelineUnified chronological feed of all items for a contactlist_companiesList all companiesget_companyGet company with linked contacts and tagscreate_companyCreate a new companyupdate_companyUpdate company fieldsdelete_companySoft-delete (or permanent delete) a companyPaste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"ethanqc-feishu-user-plugin": {
"command": "npx",
"args": [
"-y",
"feishu-user-plugin"
],
"env": {
"LARK_COOKIE": "YOUR_LARK_COOKIE_HERE",
"LARK_APP_ID": "YOUR_LARK_APP_ID_HERE",
"LARK_APP_SECRET": "YOUR_LARK_APP_SECRET_HERE",
"LARK_USER_ACCESS_TOKEN": "YOUR_LARK_USER_ACCESS_TOKEN_HERE",
"LARK_USER_REFRESH_TOKEN": "YOUR_LARK_USER_REFRESH_TOKEN_HERE"
}
}
}
}
{
"mcpServers": {
"nicolascroce-keepsake-mcp": {
"command": "npx",
"args": [
"-y",
"keepsake-mcp"
],
"env": {
"KEEPSAKE_API_KEY": "YOUR_KEEPSAKE_API_KEY_HERE"
}
}
}
}