Labsco
MCP SERVER

Feishu OAuth MCP Server

by ztxtxwd

A remote Feishu docs server you deploy on your own Cloudflare account, with Feishu OAuth built in.

Team Wikis & Documentation Platforms
Summary
Tools sized for a client, not transcribed from an API.

The author's stated difference from Feishu's official server is not coverage but shape: API-to-tool conversion produces tools too large to use in Cursor, so the complex ones here — block creation, nested blocks — were reworked to fit. Scope matters when you choose it: documents are what ships today, while spreadsheets and Bitable are listed as future plans, not features.

What it is

A remote MCP server for Feishu (Lark) documents that you deploy to Cloudflare Workers yourself. Users sign in with their Feishu account and the server manages and refreshes the `user_access_token` for them, so nothing has to be pasted into a client config. It is adapted from Cloudflare's remote-mcp-github-oauth demo with GitHub OAuth replaced by Feishu OAuth.

What you get
  • Document structure: fetch a document's block tree, and get the creation-parameter schema for a block type before creating one
  • Document editing: create blocks of the supported types, including nested blocks, update block content, and batch-delete blocks
  • Tables inside documents, image, video and file upload and insertion, and media management
  • Markdown import, and document search
  • Development-documentation search and recall
  • An OAuth 2.1 implementation that authenticates MCP clients and keeps Feishu tokens in Cloudflare KV
  • Per-user state through Durable Objects, so which tools a user sees can depend on who signed in
  • An `/sse` endpoint reachable directly by URL from Cursor, or through `npx -y mcp-remote` for clients that need a stdio bridge
Requirements

A Cloudflare account and a Feishu Open Platform application, plus Node.js 18+ and npm. Set `FEISHU_APP_ID`, `FEISHU_APP_SECRET` and `COOKIE_ENCRYPTION_KEY` as Wrangler secrets, create the `OAUTH_KV` namespace, and register `https://feishu-mcp-server.<your-subdomain>.workers.dev/callback` as the redirect URL in the app's security settings; locally the same values go in `.dev.vars` against `http://localhost:8788/callback`. The app needs permissions including `auth:user.id:read`, `task:task:read`, `offline_access` and `user_profile`. Access control is simple and worth knowing: every authenticated Feishu user can reach every tool.

Setup effort

One command plus a key — npx -y mcp-remote ${URL}, then supply credentials