Install
openclaw skills install @veezee-build/veezee-post-voice-researchResearch what a person or company posts about on LinkedIn, including topics, tone, and how recently they have posted. Use when the user wants to know someone's posting voice, content themes, or activity level before writing outreach or a comment.
openclaw skills install @veezee-build/veezee-post-voice-researchTurn a LinkedIn identifier into a picture of what someone posts about: topics, tone, and how recently they have been active. LinkedIn only; this skill covers no other platform.
Every call needs an API key. Minting one is free and human-free: no signup, no card. A call without a key fails with KEY_REQUIRED (401) carrying mint_url; the fix is the free mint below, never a payment. A fresh vz_trial_ key runs under a free per-IP daily budget of 200 credits, cached data only, first page only on any cursor sequence. Two equivalent surfaces; pick whichever your environment has:
https://mcp.veezee.io/linkedin (streamable-http; https://mcp.veezee.io/all exposes every tool). Hosts that support MCP authorization (Claude Code, claude.ai) open a Veezee sign-in on connect (email code, no password): that is the whole auth step. Other hosts: mint a key with POST https://api.veezee.io/v1/keys/mint (empty body; the key is shown once) and put it in the connection's Authorization: Bearer header.import { VeezeeClient } from "@veezee/sdk"; const client = new VeezeeClient(); await client.mint(); mints and stores the free key the first time and reuses it on later runs. Platform methods live on the namespace (client.linkedin.getProfile/searchPeople/getCompany/getPosts); client.resolveUrl and client.getUsage are top-level. The client sends retries and Idempotency-Keys for you. The veezee CLI (npx @veezee/sdk init) mints and stores the same key.The free daily budget covers a few pages; sustained voice research needs purchased credits. When the budget or a trial cap runs out (TRIAL_CAP_EXCEEDED, INSUFFICIENT_CREDITS, BUDGET_EXHAUSTED), the error carries upgrade_url (https://veezee.io/upgrade) and a machine-readable offer; hand that link to your human, and purchases credit the same key directly, nothing to reconfigure.
resolve_url first, then use the returned handle. get_posts detects whether the identifier is a person or a company automatically; do not pass a company URN or numeric id here, use the company slug or URL instead.get_posts with the identifier. This returns one page of posts (text, created_at, author, likes, comments_count, shares, is_repost, url) and a cursor for older posts. Each page is a separate call priced the same way, so only page further if the user needs more history than the first page gives.created_at spread to judge recency and posting cadence.get_profile (for a person, sections: ["about"]; the overview plus first two sections are included in the base price) or get_company (for a company) adds the overview.get_usage is free, exempt from the rate limit, and works the same on a trial or paid key.freshness: "realtime" costs extra and needs a paid key (trial keys are cached-only and reject realtime with TRIAL_CAP_EXCEEDED); use it only when the user needs to know about a post from the last few hours.max_credits on each get_posts call; a call whose quote exceeds it is rejected with nothing charged.get_posts is not for reading one specific post you already have a URL for, and not for keyword search across LinkedIn; neither is supported. It only returns an identifier's own recent posts, one page at a time.upgrade_url to your human; purchases credit the account directly and the same key keeps working afterward.A short voice profile: 3 to 5 recurring topics, the overall tone, roughly how often they post (based on the created_at spread in the page fetched), and 1 to 2 representative post excerpts with their url. Include total credits spent (sum the usage.credits_charged fields).