lark-openapi-mcp: The MCP Server That Can Read Its Own Manual
The official Lark bridge does more than expose office APIs. It helps an agent find the right endpoint, choose the right token, and carry out real work across chat, docs, calendar, and spreadsheets.
- lark-openapi-mcp is interesting because it gives agents a second MCP path for learning the platform before they act.
- Its real leverage comes from turning a sprawling Lark API surface into schema-driven tools that stay precise enough for LLM calls.
- Identity is treated as product design, not plumbing, because tenant and user tokens are routed differently and completed through a local OAuth flow.
- The official repo matters because the project stays close to Lark's own docs, auth model, and platform changes.
The weirdly powerful part: it can ask for the manual first
The surprise is not that Lark has a lot of APIs. The surprise is that lark-openapi-mcp gives an agent a way to inspect the platform's own documentation before it commits to a call. That turns the server into a correction loop, not just a pass-through.
If the request is fuzzy, the agent can reach for the recall path, read the docs, and then return to the action path with a better tool choice and a cleaner argument shape. The system is doing what good operators do: check the manual, then touch the controls.
This is the part that changes the mental model. The repo is not only a tool catalog. It is a tool catalog with a built-in study guide, so the agent can learn the platform through the same protocol it uses to act on it.
Inside the action plane: hundreds of APIs, one MCP layer
The stack is pragmatic. TypeScript gives strict types, the MCP SDK handles protocol, the official Lark SDK executes requests, Express handles OAuth callbacks, and commander shapes the CLI. The result is one server that can speak stdio, SSE, or streamable transport without forcing the caller to care.
That matters because office automation rarely lives in one place. A developer may want the same agent inside an IDE, a local terminal, or a hosted integration. The transport layer is therefore not just plumbing. It is the difference between a demo and something a team can keep using.
The scale problem is the real problem. This repository is not exposing five tidy tools. It is exposing a sprawling enterprise platform, and it turns that breadth into a machine-readable registry instead of a hand-maintained pile of wrappers.
That is why the generated Zod layer matters. LLMs do better when the contract is strict, so each endpoint can carry explicit field names, required arguments, and structured validation instead of vague prose.
Auth is the hidden product
Most API bridges fail on identity, not transport. Lark uses tenant access tokens for app-level work and user access tokens for delegated work, so the server has to decide not just what to call, but who is allowed to call it.
lark-openapi-mcp treats that choice as a first-class route. A local OAuth callback server can complete the user login flow from the terminal, then persist the token so the next tool call does not feel like a fresh setup ritual.
> **⚠️ Beta Version Notice**: This tool is currently in Beta stage. Features and APIs may change, so please stay updated with version releases.
That warning is not cosmetic. It tells you why the auth path is built the way it is. Platform APIs shift, permission scopes change, and the server has to stay close to the source of truth.
Why generated schemas matter more than they sound
An LLM is only as accurate as the tool schema it sees. Generated Zod definitions keep the arguments exact, the field names stable, and the required parameters explicit, which is essential when the surface area spans chat, docs, calendar, sheets, and more.
This is the quiet win in the repo. Instead of asking the model to infer a giant API from prose, the project gives it a typed contract. The model still reasons, but it does not have to guess at request shape.
That trade-off is what makes the scale usable. More generation means more build complexity, but it also means less drift between the OpenAPI surface, the MCP tools, and the agent's actual calls.
How it compares to the obvious alternatives
| Approach | What it gives you | What you still have to solve | Best fit |
|---|---|---|---|
| Manual Lark API integration | Full control over every endpoint and retry rule. | You own auth branching, schema maintenance, and docs drift. | One-off workflows or narrow internal tools. |
| Generic MCP wrapper with a few tools | Quick to demo and easy to understand. | Limited coverage, weak discovery, and more prompting guesswork. | Small assistants with a narrow job. |
| lark-openapi-mcp | Broad Lark coverage, schema-driven tools, recall docs, and identity-aware auth. | More moving parts, but they are centralized in one place. | Teams that want agents to do real office operations. |
The official badge matters here. This repo is close enough to Lark's own platform vocabulary to stay aligned with the product, while forks can experiment at the edges. That is a different kind of trust than a generic wrapper can offer.
Who built it, and who should care
The maintainer signal matters here. This is an official Lark project, which means the tricky pieces are not guessed at from the outside. They are aligned with the platform's actual auth model, API shape, and release cadence.
感谢您的反馈。 后续飞书项目是有计划开放 MCP 的,但是具体的时间还没有完全确定
That answer says a lot. The platform team is thinking in MCP terms, but carefully, which is exactly what you want from an office system that touches permissions, records, and shared workspaces.
The audience is straightforward: teams already working in Lark who want an agent to perform actions, not just draft text. If your workflow lives in chat threads, docs, calendar events, and spreadsheets, this repo is trying to turn those surfaces into one operational layer.
The strongest version of the project is not a chatbot feature. It is an office control plane.





