Skip to content
Back to skills

Lark Approvals

ASecurity

Read, submit, and process Feishu or Lark approvals, including attachments and comments.

  • 179 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
ai-agentsshell

Works with

  • cli
  • mcp

Security analysis

A100/100

Pro scans all 20 files and shows the line behind each finding

Scanned November 7, 2026

npx -y skills add AgentBull/ankole --skill lark-approvals --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Lark Approvals?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Lark Approvals
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/agentbull-lark-approvals/badge)](https://www.skillsdirectory.com/skills/agentbull-lark-approvals)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: lark-approvals
description: "Read, submit, and process Feishu or Lark approvals, including attachments and comments."
---

# lark-approvals

Read, submit, and process Feishu or Lark approvals, including attachments and comments.

Find the operation in [the operation index](references/index.md), then read only its linked JSON contract for inputs, outputs, and retry annotations.

Write the JSON argument object to a temporary file, then pass it over stdin so quotes and shell metacharacters remain data:

```sh
mcporter call 'lark_approvals.<tool-name>' --json - --output json --timeout 360000 < /absolute/path/arguments.json
```

After the call finishes, delete the temporary argument file and check the process exit code before parsing stdout.

Run `mcporter list` to discover the available connections. The default server is `lark_approvals`. Select `lark_approvals@<connection-slug>` for a particular application, or copy the exact `lark_approvals@<connection-slug>@<account-key>` server name from the list to select one application account. Account keys in server names are URL-encoded. If the intended workspace is unclear, ask the user to choose; do not switch accounts to work around an authorization failure.

Applet routes and Actions use `await AnkoleRuntime.mcp.call(tool, args, { server: "lark_approvals", connection, account })` with the same contract. Omit connection/account only when the intended default is unambiguous. `AnkoleRuntime.admin.mcp.call` represents the current page owner; it does not select an application account.

Approval actions represent the active human who authorized this call. Ankole uses verified identity-provider user_id bindings for the interfaces that accept application tokens. Add-sign and rollback require personal OAuth because the upstream interfaces require a user token. approvals_create_instance requires a stable uuid; preserve it across retries. Form accepts an array of controls or an object keyed by definition control ID/name. Read the definition before constructing an unfamiliar form. Upload attachments with approvals_upload_file and use the returned file_code in the form. To handle cards, bind card.action.trigger from `connector://<auth-config-id>/lark` to the Applet Action that owns the flow, verify the operator against the authorized human, perform the selected approval action, and update the card using lark_im.im_update_message.

If no suitable connection or application account is listed, direct the user to the tenant’s Connectors page; a tenant administrator connects an application workspace, and members connect their own personal accounts.

For a file created in the Worker workspace, use the Pod `files.upload` operation with the target page ID, `local_path`, and role before calling an upload tool. Follow the `pod-content` Skill to choose or create that page and handle file versions. Use the returned `page_id` and `file.path` as `pages/<page-id>/<path>` in `file_ref`; a Worker filesystem path is not a Pod file reference.

An `oauth_consent_required` result identifies a missing personal authorization. Present the returned consent link, then repeat the intended operation after authorization. `upstream_outcome_unknown` means a write may have completed; inspect its result before repeating it. Respect `retryAfterSeconds` and use `continueSlice` for long waits in Applet Actions. In Applet error handlers, read recovery metadata such as `authorization_url`, `retryAfterSeconds`, and a partially created `resource_id` from `error.details`; `error.code` identifies the failure.

For a complete personal pending-task → interactive card → verified click → approval → card update Applet, use [the approval inbox example](examples/approval-inbox/README.md) and its packaged server source.

Files in this skill

  • SKILL.md3.7 KB
  • agents/openai.yaml646 B
  • examples/approval-inbox/README.md1.6 KB
  • examples/approval-inbox/server/main.js4.9 KB
  • references/approvals_add_sign.json874 B
  • references/approvals_approve.json719 B
  • references/approvals_cancel.json550 B
  • references/approvals_cc.json706 B
  • references/approvals_create_comment.json1.2 KB
  • references/approvals_create_instance.json3.8 KB
  • references/approvals_get_definition.json2.9 KB
  • references/approvals_get_instance.json5.6 KB
  • references/approvals_list_comments.json2.7 KB
  • references/approvals_list_instances.json972 B
  • references/approvals_list_tasks.json2.9 KB
  • references/approvals_reject.json717 B
  • references/approvals_rollback.json717 B
  • references/approvals_transfer.json753 B
  • references/approvals_upload_file.json746 B
  • references/index.md1.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.