mcp-lark-doc-manage 0.1.8
A Model Context Protocol server for accessing Lark documents
License: MIT
Requires Python: >=3.7

# MCP Lark Doc Manage

A Model Context Protocol server for searching and accessing Lark(Feishu) documents.

[中文文档](README_zh.md)

> **Important**: Before using this MCP Server, you need to have a Lark Enterprise Application. If you haven't created one yet, please follow the setup instructions below.

## Features

### Document Content Access
- Supports both Lark Doc and Wiki document types
- Automatically handles document type detection and ID extraction
- Returns raw content in text format for LLM processing

### Authentication
- OAuth-based user authentication
- Automatic token refresh and expiration management
- Customizable OAuth callback server

### Error Handling
- Comprehensive error reporting for authentication issues
- Clear feedback for invalid document URLs
- Detailed error messages for troubleshooting

## Installation

```bash
uvx mcp-lark-doc-manage
```

## Configuration

### Create Your Lark Enterprise Application

1. Visit [Lark Open Platform](https://open.larkoffice.com/)
2. Click "Developer Console" in the top right corner
3. Click "Create Custom App"
4. Fill in the basic information:
   - App Name
   - App Description
   - App Icon
5. In the "Security Settings" section:
   - Add your domain to "Request Domain Name Whitelist"
   - Configure OAuth 2.0 settings
6. Enable required capabilities and apply for permissions in "Permission Management"
7. Submit for review and wait for approval

For detailed instructions, see [Custom App Development Process](https://open.feishu.cn/document/home/introduction-to-custom-app-development/self-built-application-development-process).

### Get App ID and App Secret

1. Get App ID:
   - Go to your app in [Developer Console](https://open.larkoffice.com/app)
   - Find "App ID" (also called "Client ID") in "Credentials & Basic Info"
   - It usually starts with "cli_" for internal apps

2. Get App Secret:
   - In the same "Credentials & Basic Info" page
   - Find "App Secret" (also called "Client Secret")
   - Click "View" to see the secret
   - Note: Keep your App Secret secure and never share it publicly

### Get Folder Token

To get a folder token:

1. Open the target folder in Lark
2. Copy the folder URL, for example: `https://xxx.feishu.cn/drive/folder/xxx`
3. The last segment in the URL is your folder token
4. Alternative method:
   - Use the Drive API to list folders
   - Find the target folder's token in the response

Note: Make sure your app has the `drive:drive:readonly` permission to access folders.

### Required Permissions
```wiki:wiki:readonly   # Wiki read-only access
wiki:node:read      # Wiki node read access
docx:document:readonly   # Document read-only access
search:docs:read    # Document search access
drive:drive:readonly    # Drive read-only access
```

### Environment Variables

Before using this MCP server, you need to set up your Lark application credentials:

1. Create a Lark application in Lark Open Platform
2. Get your App ID and App Secret
3. Configure environment variables:

```bash
export LARK_APP_ID="your_app_id"
export LARK_APP_SECRET="your_app_secret"
export FOLDER_TOKEN="your_folder_token"    # Specified folder token
export OAUTH_HOST="localhost"              # OAuth callback server host (default: localhost)
export OAUTH_PORT="9997"                   # OAuth callback server port (default: 9997)
```

## Usage

Configure in Claude desktop:

```json
"mcpServers": {
    "lark_doc": {
        "command": "/path/to/your/uvx",
        "args": [
            "mcp-lark-doc-manage"
        ],
        "env": {
            "LARK_APP_ID": "your_app_id",
            "LARK_APP_SECRET": "your_app_secret",
            "OAUTH_HOST": "localhost",
            "OAUTH_PORT": "9997",
            "FOLDER_TOKEN": "your_folder_token",
            "DEBUG": "1"  // optional, enable debug mode
        }
    }
}
```

Note: Replace `/path/to/your/uvx` with your actual uvx path (e.g., `/Users/username/anaconda3/bin/uvx`).

### Available Tools

1. get_lark_doc_content
   - Purpose: Retrieve document content from Lark
   - Args: documentUrl (string) - The URL of the Lark document
   - Returns: Document content in text format
   - Supports:
     - Doc URLs: https://xxx.feishu.cn/docx/xxxxx
     - Wiki URLs: https://xxx.feishu.cn/wiki/xxxxx

2. search_wiki
   - Purpose: Search documents in Lark Wiki
   - Args: 
     - query (string) - Search keywords
     - page_size (int, optional) - Number of results to return (default: 10)
   - Returns: JSON string containing search results with following fields:
     - title: Document title
     - url: Document URL
     - create_time: Document creation time
     - update_time: Document last update time

3. list_folder_content
   - Purpose: List contents of a specified folder
   - Args:
     - page_size (int, optional) - Number of results to return (default: 10)
   - Returns: JSON string containing file list with following fields:
     - name: File name
     - type: File type
     - token: File token
     - url: File URL
     - create_time: Creation time
     - edit_time: Last edit time
     - owner_id: Owner ID

4. create_doc
   - Purpose: Create a new Lark document with content
   - Args:
     - title (string) - Document title
     - content (string, optional) - Document content in Markdown format
     - target_space_id (string, optional) - Target wiki space ID to move the document to
   - Returns: JSON string containing:
     - document_id: Created document ID
     - title: Document title
     - url: Document URL
   - Features:
     - Supports Markdown content conversion
     - Optional wiki space integration
     - Automatic folder placement

## Error Messages

Common error messages and their solutions:

- "Lark client not properly initialized": Check your LARK_APP_ID and LARK_APP_SECRET
- "Invalid Lark document URL format": Verify the document URL format
- "Failed to get document content": Check document permissions and token validity
- "Failed to get app access token": Check your application credentials and network connection
- "Failed to get wiki document real ID": Check if the wiki document exists and you have proper permissions
- "Document content is empty": The document might be empty or you might not have access to its content
- "Authorization timeout": User didn't complete authorization within 5 minutes
- "Folder token not configured": Check your FOLDER_TOKEN environment variable

## Development Notes

### OAuth Callback Server

Default configuration:

- Host: localhost
- Port: 9997

Customize via environment variables:

- OAUTH_HOST: Set callback server host
- OAUTH_PORT: Set callback server port

## License

MIT License